我知道,有 JSONP,它涉及服务器合作来命名数据空间。
令我困扰的是,脚本标签 src
的内容已评估,但不可供读取。 p>
<script src="http://www.google.com"></script>
我们需要弄清楚的是如何命名数据,仅此而已。 当然,我尝试了相当愚蠢的事情,但没有相关结果(我知道这不起作用,但你可以看到我想要实现的目标):
<script>eval('var namespace="');</script>
<script src="http://www.google.com"></script>
<script>eval('";');</script>
由于确实没有关于如何评估 src
内容的相关信息,我知道它是全局范围,但如果我们可以跟踪评估步骤或者可能链以某种方式评估范围(关于此的文档也很少),我们可以解决这个恼人的“已评估但不可读”的问题。
有什么想法吗?
最佳答案
HTML5 提供了 window.postMessage
,它提供了安全跨域消息传递的机制,并受 Firefox 3、Opera 9.6 和 WebKit nightlies 的支持。
也就是说,您上面的建议不起作用,因为它需要与 javascript 的 eval
完全不同的行为。 eval
在当前上下文中解析并执行给定的字符串——您所请求的是 eval 更改包含函数的实际代码。例如。
for (var i = 0; i < 10; i++) eval("; doSomething();");
会变成
for (var i = 0; i < 10; i++) ; doSomething();;
意味着 for 循环变空,并且 doSomething
只会被调用一次。显然,这会导致语义难以理解,并且大大降低了使用安全性,因为 eval 将获得直接影响控制流的能力。
关于javascript - 让我们完全在客户端使用脚本标签解决跨域ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/551363/