我们正致力于嵌入式可视化"在一个页面中。嵌入对象是从同一服务器上的另一个URL加载的(没有CORS问题),但是一旦用户加载了主页面,辅助资源就需要一段时间才能启动(1-5秒)。
<object id="main" width="100%" height="100%">
<embed src="some-url" />
</object>
我们希望在此期间运行某种微调器,测试我们是否从嵌入资源中获取200 OK
,然后将其附加到页面,因为没有好办法让我们允许刷新嵌入对象,直到它变得可用。这是我到目前为止所尝试的:
function test_ie_availability(){
var loaded_page = false;
var count = 0;
while (!loaded_page){
console.log("Test: " + count);
count = count + 1;
if(count > 10){
break;
}
$.ajax({
type: "GET",
async: true,
url: access_url,
}).done(function(data, textStatus, jqXHR){
if(textStatus === "success"){
loaded_page = true;
}else{
console.log(textStatus);
}
});
if(!loaded_page){
setTimeout(function(){
console.log("Sleeping for a second");
}, 1000);
}
}
}
async:true
和async:false
都会产生相同的结果:
Test: 0 z.js:34
Test: 1 z.js:34
Test: 2 z.js:34
Test: 3 z.js:34
Test: 4 z.js:34
Test: 5 z.js:34
Test: 6 z.js:34
Test: 7 z.js:34
Test: 8 z.js:34
Test: 9 z.js:34
Test: 10 z.js:34
undefined
(10) Sleeping for a second
我已尝试在loaded_page
/ success
回调中设置error
变量,但两者均无效。
答案 0 :(得分:1)
如何在区间内创建一个函数以继续检查它是否已加载...
var interval = setInterval( function () {
if (document.all["main"].readyState == 4) {
clearInterval(interval);
alert("Initialization is ready.");
}
}, 100);
答案 1 :(得分:1)
setTimeout(...)
不会导致您的程序“睡眠”#34; - 它使得它在给定的间隔后做某事。
所以你的while
循环没有停顿运行11次,每次创建一个新的1s计时器,输出&#34;睡眠一秒钟&#34;到你的控制台。
您可以完全删除循环,只需添加代码以隐藏微调器代替此行:
loaded_page = true;