这几天遇到了个棘手问题(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. 基于nginx的HLS简单服务器搭建

    一,首先搭建nginx服务器: 1.1,选定源码目录 选定目录 /usr/local/HLS cd /usr/local/HLS 1.2,安装PCRE库 cd /usr/local/HLS 到www. ...

  2. uva 10061 How many zero's and how many digits ?

    How many zeros and how many digits? Input: standard input Output: standard output Given a decimal in ...

  3. Oracle 10g体系结构及安全管理

    (1)               Oracle数据库服务器:数据库,实例 (2)               数据库:(1)物理存储—数据文件,控制文件,日志文件,(2)逻辑存储—表空间,段,区间, ...

  4. 序列!序列!- 零基础入门学习Python016

    序列!序列! 让编程改变世界 Change the world by program 你可能发现了,小甲鱼把列表.元组和字符串放在一块儿来讲解是有道理的,我们发现Ta们之间有很多共同点: 1. 都可以 ...

  5. Unity3D使用NGUI做个弹窗

    主要函数:  NGUITools.AddChild(gameobj, prefab);//gameobj为父对象,prefab为要显示的窗体对象预制 然后写个方法,限制出现多个即可

  6. Oracle 10g RAC启动与关闭命令

    一. 检查共享设备 一般情况下, 存放OCR 和 Voting Disk 的OCFS2 或者raw 都是自动启动的. 如果他们没有启动,RAC 肯定是启动不了的. 1.1 如果使用ocfs2的,检查o ...

  7. Codeforces 486D D. Valid Sets

    http://codeforces.com/contest/486/problem/D 题意:给定一棵树,点上有权值,以及d,要求有多少种联通块满足最大值减最小值小于等于d. 思路:枚举i作为最大的点 ...

  8. 【转】Kconfig,Makefile 和 .config

    原文网址:http://blog.csdn.net/nxh_love/article/details/11846861 最新在做Sensor驱动移植的时候,发现了Android driver 中有Kc ...

  9. ActionResult解析

    原文地址:http://blog.csdn.net/gulijiang2008/article/details/7642213 ActionResult是一个抽象类, 在Action中返回的都是其派生 ...

  10. UESTC_Just a Maze CDOJ 1162

    Just a Maze Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 262144/262144KB (Java/Others) Su ...