将<script>内容作为String获取

ors*_*har 4 html javascript jquery

我尝试按需使用Javascript来覆盖跨域问题.

所以现在我的页面上有这样的东西:

<script id="scr1" src="{some other domain url}"></script>
Run Code Online (Sandbox Code Playgroud)

这个脚本的内容只是一个数组:

["hello", "world", "what", "where"]
Run Code Online (Sandbox Code Playgroud)

我想以某种方式将此内容作为字符串获取,以便我可以评估它.
我希望我有一些JS/JQuery方法

var v = eval($("#scr1").getContent());
Run Code Online (Sandbox Code Playgroud)

你能帮我吗?

注意:我不能使用ajax作为解决方案.

tva*_*son 9

你应该查找JSONP.您希望脚本返回的是以数据作为参数调用回调.

<script id="scr1" src="http://www.example.com/some/action?callback=cb" type="text/javascript></script>
Run Code Online (Sandbox Code Playgroud)

然后,服务器端将生成脚本内容:

cb( ["hello", "world", "what", "where"] );
Run Code Online (Sandbox Code Playgroud)

然后在你的页面中,你需要一个名为cb需要数组的函数.

function cb(data) {
  // do something with the array
}
Run Code Online (Sandbox Code Playgroud)

当然,这需要服务器的合作来理解你的回调参数并做出适当的响应.如果你控制服务器,这很容易做到.如果没有,那么您将需要使用构造为返回JSONP的API.该callback参数是此类框架的标准名称.如果他们没有API,那么您需要在服务器上代理请求,在这种情况下,您可以使用标准JSON.

FWIW,jQuery使得期望返回JSONP的API非常容易.

$.getJSON( 'http://example.com/api/method?callback=?', data, function(result) {
     // do something with the json result
});
Run Code Online (Sandbox Code Playgroud)

您也可以将此与post/get/ajax方法一起使用,但getJSON更容易.请注意,包含callback参数会自动告诉它使用JSONP(脚本)请求并自动填写它创建的回调的名称,以便在请求中包装(匿名)回调函数.