在chrome控制台中,我能够执行以下另一个域中找到的以下javascript函数:
EditTextViews
test.js 的代码如下:
(function() {
var scr = document.createElement('script');
scr.src = 'https://www.myawesomedomain.com/test.js';
document.head.appendChild(scr);
scr.onload = function(){
myfunc();
};
})()
到目前为止一切都很好!
现在我在同一个域名上有另一个名为 myjson.json 的文件,其中包含以下内容:
let myfunc = function() {
alert ('you are awesome');
}
我想修改初始代码以提取以前的json值并执行console.log。我尝试了以下代码,但由于某种原因它无法运行:
{"message":"you are awesome!"}
此的问题:
我在上面的代码中做了什么基本的错误?我遗憾地被困在这里一段时间。
答案 0 :(得分:0)
您需要使用ajax收集函数内部的响应,如下所示:
$.getJSON("https://www.myawesomedomain.com/myjson.json", function(result){
console.log(result)
});
});
将结果作为函数参数收集非常重要。
<强>更新强>
如果你想坚持自己的方法:
<script type="text/javascript">
$(document).ready(function() {
var scr = document.createElement('script');
scr.type = 'application/json';
scr.src = 'https://www.myawesomedomain.com/myjson.json';
scr.onload = myFunction()
document.head.appendChild(scr);
})
function myFunction() {
console.log($(this).message)
}
</script>
这似乎有效。您的代码无法正常工作的原因是您无法动态嵌入静态调用。换句话说,您是动态嵌入脚本,然后您需要有一个预定义的函数,onload将调用。正如我在评论中所说,你的onload没有被调用。
**更新2 **
虽然上面的代码调用onload函数,但它可能无法实现你想要做的事情。这是不可能的,因为它打开了一个巨大的安全漏洞。
资料来源:Read response of a file called with script src tag from external sever
How to access plain text content retrieved via <script type="text/plain" src=...> in JavaScript?