我知道这个答案已经重复,但没有人为我工作,我不知道为什么:(。我有一个div标签,其中包含一个脚本标签(来自网站)并加载一种框架。这个框架显示了一个监视器,感谢几个变量,比如id(这是最重要的)。所以,我想每5秒钟,id改变显示另一个监视器。
问题是在我的刷新代码中我使用方法load(),但在Firefox中我收到此警告“忽略了从异步加载的外部脚本调用document.write()。”在铬中,我得到了一个“无法在'文档'上执行'写'':除非明确打开,否则无法从异步加载的外部脚本写入文档。”
这是我的代码:
<script type="text/javascript">
var id = ["id1", "id2", "id3"];
var number;
var i = 0;
function change(){
if(i<id.length){
number = id[i];
i++;
}else if(i>=id.length){
clearInterval();
number = id[i];
console.log("start again");
}
return number;
}
function refresh(){
$('#midStag').load("myUrl" + ' #midStag');
}
setInterval(refresh, 5000);
</script>
<div id="midStag">
<script type="text/javascript">
//I only put the id because is the more important variable
//and the only one that I am changing
id = cambio();
/*more variables like width or height*/
</script>
<script type="text/javascript" src="http://dashboard.monitis.com/sharedModule/shareModule.js"></script>
我真的需要它,拜托。任何帮助,我会很感激。如果你不明白的话就告诉我,我会纠正的。谢谢。
答案 0 :(得分:0)
这是因为shareModule.js
脚本最后有一个document.write
语句。而且,由于您在使用.load()
时正在重新加载该脚本,因此文档已关闭并且异步加载脚本时会出现错误。
你可以做一些事情来解决这个问题:
document.write
,但需要访问存储在document.write
。唯一的问题是,只要在服务器上更新sharedModule.js
,您就必须手动更新脚本。编辑框架的网址,替换所需的信息,即将旧网址替换为新网址。然后使用新网址设置src。
var src = $("span iframe").prop("src");
src = src.replace(/publicKey=\d+/,"publicKey="+newKey);
$("span iframe").prop("src",src);
将document.write
替换为将以更友好的方式插入html的函数
document.write = function(markup){
document.currentScript.parentElement.insertAdjacentHTML('beforeend',markup);
};
演示替换document.write
monitis_embed_module_width = 100;
monitis_embed_module_height = 100;
monitis_embed_module_id = 300;
document.write = function(markup){
document.currentScript.parentElement.insertAdjacentHTML('beforeend',markup);
};
var div = document.getElementById("test");
setTimeout(function(){
var s = document.createElement("script");
s.src = "http://dashboard.monitis.com/sharedModule/shareModule.js";
div.innerHTML = "";
div.appendChild(s);
},1000);
<div id="test">
Simulating load...
</div>
演示替换src
var div = document.getElementById("test");
var frame = null;
function reloadFrame(){
frame = frame || div.querySelector("iframe");
var src = frame.src;
var id = Date.now();
frame.src = src.replace(/publicKey=\d+/,"publicKey="+id);
}
setTimeout(reloadFrame,2000);
<div id="test">
<script>
monitis_embed_module_width = 100;
monitis_embed_module_height = 100;
monitis_embed_module_id = 300;
</script>
<script src="http://dashboard.monitis.com/sharedModule/shareModule.js"></script>
</div>