客户端调用web中js方法(C调B)跨域问题
这几天遇到了个棘手问题(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)跨域问题的更多相关文章
- Java Web中实现设置多个域名跨域访问
添加以下设置可允许所有域名跨域访问: response.setHeader("Access-Control-Allow-Origin","*"); 但在实际应用 ...
- 纯静态界面中(html)中通过js调用dll中的方法从数据库中读取数据
最近接到一个离职员工的任务,一个搭好框架的ERP系统,看了两天,说一下看到的东西,整个项目目录中我没发现一个.aspx后缀的文件,全是静态HTML文件,之后发现他用的jquery简直看的头疼,不过大概 ...
- 【ASP.NET Web API教程】3.2 通过.NET客户端调用Web API(C#)
原文:[ASP.NET Web API教程]3.2 通过.NET客户端调用Web API(C#) 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的 ...
- 通过.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 ...
- C#后台程序与HTML页面中JS方法互调(功能类似于Ajax中的DWR)
此方法适用于 C#中嵌入WebBrowser(浏览器) 通过浏览器中加载的页面与C#的后台代码进行交互. 一.C#程序 1.在C#窗体中添加WebBrowser(浏览器),将页面的URL添加到浏览器中 ...
- C#后台程序与HTML页面中JS方法互调
此方法适用于 C#中嵌入WebBrowser(浏览器) 通过浏览器中加载的页面与C#的后台代码进行交互. 一.C#程序 1.在C#窗体中添加WebBrowser(浏览器),将页面的URL添加到浏览器中 ...
- Unity SLua 如何调用Unity中C#方法
1.原理 就是通常在Lua框架中所说的,开放一个C#的web接口,或者叫做在Slua框架中注册函数. 2.作用 在Lua中调用C#中的方法,这个是在做热更新中很常用的一种方法,无论是slua,还是lu ...
- 安卓端调用h5界面js方法和ios端调用h5界面js方法
备注:本人为h5开发人员,不懂安卓和ios,这是开发小伙伴对接联调的主代码. 1.iOS端调用h5界面js方法: 2.安卓端调用h5界面js方法: @Override protect ...
- 使用RPC 调用NameNode中的方法
用户在Client 端是很难对 NameNode中的信息进行直接访问的, 所以 ,在Hadoop系统中为 Client端 提供了一系列的方法调用,这些方法调用是通过RPC 方法来实现的, 根据RPC ...
随机推荐
- windows下配置svn的https访问
svn是一个功能强大的代码版本管理系统,可以将服务端安装在linux.unix以及windows下.svn通常采用http方式进行代码提交与下载.由于密码采用明文传输,因此存在泄密的风险.若采用htt ...
- C#设置textboox只能输入数字`
1.在闪电KeyPress事件中添加 private void textBox_pwmx_fre_KeyPress(object sender, KeyPressEventArgs e) { //如果 ...
- 【JAVA编码】 JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换
http://blog.csdn.net/qinysong/article/details/1179489 这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记 ...
- 最大公约数(gcd):Euclid算法证明
1个常识: 如果 a≥b 并且 b≤a,那么 a=b. 2个前提: 1)只在非负整数范围内讨论两个数 m 和 n 的最大公约数,即 m, n ∈ N. 2)0可以被任何数整除,但是0不能整除任何数,即 ...
- 我和小美的撸码日记(1)之软件也需靠脸吃饭,带您做张明星脸(附后台经典框架 DEMO 下载)
众所周知程序员得靠技术吃饭,但是真的光靠技术就够了吗?Teacher苍,一位德艺双馨的艺术家,论技术她自然是炉火纯青,我觉得她桃李遍天下的原因不仅限于些,试想如果Teacher苍长得跟凤姐一样再带点乡 ...
- [POJ] 2352 Stars [线段树区间求和]
Stars Description Astronomers often examine star maps where stars are represented by points on a pla ...
- [Codeforces Round #247 (Div. 2)] A. Black Square
A. Black Square time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- Powershell 快捷键
Powershell的快捷键和cmd,linux中的shell,都比较像. ALT+F7 清除命令的历史记录PgUp PgDn 显示当前会话的第一个命令和最后一个命令Enter 执行当前命令End 将 ...
- libusb-win32 在visual studio2008中成功编译回忆录
关于这个项目不用多说 介绍 libusb是一个针对usb通讯的库. 使用它, 你不需要知道操作系统的细节, 你只需要对USB有足够的了解即可. 它也不需要你写驱动, 所有的工作都可以在用户态完成. 使 ...
- android官方侧滑菜单DrawerLayout详解
drawerLayout是Support Library包中实现了侧滑菜单效果的控件,可以说drawerLayout是因为第三方控件如MenuDrawer等的出现之后,google借鉴而出现的产物.d ...