我可以不在书签中使用setTimeout()
吗?
这有效: JavaScript的: document.location = “mysite.com”; 警报( “测试”); 空隙(S);
这不是: JavaScript的: document.location = “mysite.com”; var t = setTimeout(function(){ 警报( “测试”); },10000); 空隙(S);
为什么会这样?
答案 0 :(得分:1)
每次更改页面时,整个javascript上下文都会被销毁并重新创建(这是出于安全原因以及将会出现上下文的事实)
document.location="mysite.com";
有效地更改页面的上下文,销毁任何javascript引用(在您的情况下是超时)。新页面开始加载页面的那一刻有了新的背景。
要使你的超时工作,你需要一个响应时间超过10秒的服务器(基于你的第二个参数10000或者将超时减少到10毫秒)。
document.location="mysite.com";
var t=setTimeout(function () { alert("test"); }, 10);
你为什么需要这个?
答案 1 :(得分:0)
Bookmarklets只能用于网页上的普通嵌入式脚本。如果你不能用普通的JavaScript做到这一点,你就不能用书签来做。
在您的示例中,如果以页面中嵌入的普通javascript运行,则一旦页面重新加载,超时将与该页面中的所有其他变量一起消失。 (不要因为脚本标签中嵌入的JavaScript在页面加载时重新运行这一事实而误导。这会产生新的超时,但前一个会被删除。)
更精确的测试是将您的bookmarklet代码放入页面上的超链接并单击它(<a href="javascript:...">test</a>
)。这与单击包含相同代码的书签完全相同。你无法做到这一点,你不能用书签。
解决您的问题:
选项1:Bookmarklet在当前页面内创建一个iframe,并在iframe中不断重新加载所需的页面。
选项2:Bookmarklet打开一个小窗口并向其中注入javascript,不断重新加载opener
窗口。