script 解决 跨域访问

跨域访问,简单来讲,就是A服务器的javascript代码访问B服务器,包括提交内容、获取内容。由于安全原因,跨域访问是被各大浏览器所默认禁止的。写过跨域访问 ajax 的朋友相信都遇到过被告知“没有权限”的情况。通过 XMLHttp 来发送数据给 Bookmark 服务器的尝试失败了。最终,在一篇文章中看到,与 iframe 不同,如果 A 网站从 B 网站加载 javascript , A 网站可以自由的访问该 javascript 的内容,并不会被浏览器认为是跨域访问。当用户点击提交时,可以动态创建一个 javascript 对象,该对象的 src 指向 Bookmark 服务器的一个 servlet ,注意: URL 、 Tag 、 Notes 、 User 、Password 等信息被作为 src URL 参数传给服务器。请看下面的代码

  var url = "https://api.weixin.qq.com/cgi-bin/token?";
            var grantType = "client_credential";
            var appid = "wx275399bf9d89c99d";
            var secret = "eae776d074c9f8e08d2f6209d0469456";
            url = url + "&grant_type=" + grantType + "&appid=" + appid + "&secret=" + secret;
            url = encodeURI(url);
            var script = document.createElement("script");
            script.setAttribute("src", url);
            script.type = "text/javascript";
            document.body.appendChild(script);
        
        }
        //客户端接收到服务器的信息,操作此信息
        function onServerResponse(INADEQUATE_INFORMATION) {
            alert(INADEQUATE_INFORMATION);
        }

上面例子中,script. js_obj.setArrribute() 将信息作为 src 的 URL 参数提交给了 weixin servlet 。那么用户又如何取得服务器的响应信息呢?答案就是最末一行代码, servlet 的输出必须是 javascript 代码,它可以调用用户网页上的其他 javascript 函数,以及操作 dom 对象。下面的 servlet 代码生成了一个 javascript 函数调用:

  out.write("onServerResponse(INADEQUATE_INFORMATION);");服务器返回的script代码,包括一个函数,参数就是要返回的值
document.body.appendChild(js_obj) 执行后 onServerResponse( INADEQUATE_INFORMATION) 就会得到执行,使客户网页响应服务器结果。这样一个完整的通信过程就完成了。
posted @ 2013-05-23 13:36  海藻  阅读(1481)  评论(0编辑  收藏  举报