这几天遇到了个棘手问题(c调b),经过排错查出了问题。

一,问题描述如下:

  1.客户端需要调用father.html中一个js方法,特殊之处在于 这个father.html中有个iframe嵌套了一个son.jsp,本质就是客户端需要调用son.jsp

中的一个getUserid("userid")方法把客户端的userid传递给son.jsp,现象是客户端拼接了改js方法并且也传入了userid,调用了stringbyevaluatingjavascriptfromstring执行该js方法后,son.jsp中的该方法没反应,也就是客户端没调用到这个js。需要说明的是father.html 和son.jsp的域名是不同的。

  2,C端调用B端的js方法不是主动的,而是B端给C端发信号说:C端,可以来执行我的这个方法了,我把方法名字给你了,你拿到后拼接传入参数执行下就行了

二,排查过程:

  1,客户端的webView:shouldLoad方法中,先拿到father.html的链接,执行完后又拿到了son.jsp的链接,最后拿到了son.jsp发给客户端的信号,也就是js方法名,拿到后传入参数执行了stringbyevaluatingjavascriptfromstring,这时候son.jsp端的该方法应该有反应的,但实际上没有被执行

  2,在father.html中也发送了同样的B调C指令,并且在father.html中也定义了同样的js方法后,重新运行如下:客户端的webView:shouldLoad方法中,先拿到father.html的链接,执行完后又拿到了B发送给C端的信号,也就是js方法名,拿到后传入参数执行了stringbyevaluatingjavascriptfromstring,接着father.html中的该js方法就执行了, 再然后才拿到了son.jsp的链接,接着拿到了son.jsp发给客户端的信号,也就是js方法名,拿到后传入参数执行了stringbyevaluatingjavascriptfromstring,这时候father.html中的js方法又被执行了一次,而son.jsp中的js方法依旧没被执行

  3,不在father.html中发送同样的B调C指令,只在father.html中定义了同样的js方法后,重新运行如下:客户端的webView:shouldLoad方法中,先拿到father.html的链接,然后才拿到了son.jsp的链接,接着拿到了son.jsp发给客户端的信号,也就是js方法名,拿到后传入参数执行了stringbyevaluatingjavascriptfromstring,这时候father.html中的js方法被执行了,而son.jsp中的js方法依旧没被执行

  4,结论:客户端拿到了B端发出的指令,也传入了B端需要的参数(userid),但执行失败了,原因就是客户端只在father.html中找了该js方法,但是没有找到,所以无法执行,而它进不到son.jsp中找,因为跨域了。所以该js方法执行失败。如果在father.html中找到了该js方法就执行

三,解决方案:

  1.在father.html中定义和son.jsp指令中相同的js方法,这样C端执行时,father.html中的该js方法就会被执行到了,拿到了客户端传递过来的userid,再调用son.jsp中的该方法,传递userid进去并执行,这样son.jsp就拿到了userid,总的来说就是曲线救国,让son.jsp的js方法间接被执行了

  2.具体的father.html中的js调用son.jsp中的js方法:(1)在两者的<script/>块内定义相同的document.domain='域名',再调用

就实现了js的跨域调用。

客户端调用web中js方法(C调B)跨域问题的更多相关文章

  1. Java Web中实现设置多个域名跨域访问

    添加以下设置可允许所有域名跨域访问: response.setHeader("Access-Control-Allow-Origin","*"); 但在实际应用 ...

  2. 纯静态界面中(html)中通过js调用dll中的方法从数据库中读取数据

    最近接到一个离职员工的任务,一个搭好框架的ERP系统,看了两天,说一下看到的东西,整个项目目录中我没发现一个.aspx后缀的文件,全是静态HTML文件,之后发现他用的jquery简直看的头疼,不过大概 ...

  3. 【ASP.NET Web API教程】3.2 通过.NET客户端调用Web API(C#)

    原文:[ASP.NET Web API教程]3.2 通过.NET客户端调用Web API(C#) 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的 ...

  4. 通过.NET客户端调用Web API(C#)

    3.2 Calling a Web API From a .NET Client (C#) 3.2 通过.NET客户端调用Web API(C#) 本文引自:http://www.asp.net/web ...

  5. C#后台程序与HTML页面中JS方法互调(功能类似于Ajax中的DWR)

    此方法适用于 C#中嵌入WebBrowser(浏览器) 通过浏览器中加载的页面与C#的后台代码进行交互. 一.C#程序 1.在C#窗体中添加WebBrowser(浏览器),将页面的URL添加到浏览器中 ...

  6. C#后台程序与HTML页面中JS方法互调

    此方法适用于 C#中嵌入WebBrowser(浏览器) 通过浏览器中加载的页面与C#的后台代码进行交互. 一.C#程序 1.在C#窗体中添加WebBrowser(浏览器),将页面的URL添加到浏览器中 ...

  7. Unity SLua 如何调用Unity中C#方法

    1.原理 就是通常在Lua框架中所说的,开放一个C#的web接口,或者叫做在Slua框架中注册函数. 2.作用 在Lua中调用C#中的方法,这个是在做热更新中很常用的一种方法,无论是slua,还是lu ...

  8. 安卓端调用h5界面js方法和ios端调用h5界面js方法

      备注:本人为h5开发人员,不懂安卓和ios,这是开发小伙伴对接联调的主代码. 1.iOS端调用h5界面js方法:     2.安卓端调用h5界面js方法: @Override    protect ...

  9. 使用RPC 调用NameNode中的方法

    用户在Client 端是很难对 NameNode中的信息进行直接访问的, 所以 ,在Hadoop系统中为 Client端 提供了一系列的方法调用,这些方法调用是通过RPC 方法来实现的, 根据RPC ...

随机推荐

  1. silverlight+wcf 获得web参数

    可以由wcf直接得到参数 ,具体代码如下: using System;using System.Linq;using System.Runtime.Serialization;using System ...

  2. UIButton和UIImageView的区别

    1.显示图片 1> UIImageView只能一种图片(图片默认会填充整个UIImageView)  image\setImage: 2> UIButton能显示2种图片 * 背景 (背景 ...

  3. C#基本语句与C++区别

    条件语句必须为bool表达式 int a = 1; if(a) { ... } 在c++中可以,但c#报错 但 bool b = true;//不能写成b = 1了: if(b) { ... } 是可 ...

  4. poj3614 贪心

    Sunscreen Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6410   Accepted: 2239 Descrip ...

  5. hdu 2642 Stars

    Problem Description Yifenfei is a romantic guy and he likes to count the stars in the sky. To make t ...

  6. 分享到QQ空间、新浪微博、腾讯微博的代码!

    给网页加上分享代码,借助网友的力量推广网站,目前已经很流行了 以下是网页代码 QQ空间分享代码如下: <a href="javascript:void(0);" onclic ...

  7. win7 去除桌面快捷方式小箭头

    二手入了个 sony 的本子 vgn-sz780 拿手上,感觉真心不错,然后装系统,装好xp后发现怎么折腾都没声音,由于我的硬盘是SSD的虽然有点小只有60G,但是速度还是蛮不多的,于是一横心就装了 ...

  8. Java compiler level does not match the version of the installed Java project facet.解决办法

    问题原因: 出现这个问题的原因是因为,eclipse/myeclipse的jdk编译版本与出现问题的项目JDK编译版本不一致所导致!   解决办法: 工程名---->右键properties-- ...

  9. hdu 1732 Push Box

    http://acm.hdu.edu.cn/showproblem.php?pid=1732 推箱子和游戏规则一样. #include <cstdio> #include <cstr ...

  10. LeetCode_implement strstr ()

    Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if need ...