我有这个用户名:
// ==UserScript==
// @name test
// @namespace test
// @description show's an alert on load
// @include http://*
// @include https://*
// ==/UserScript==
window.addEventListener('load', function(){alert("loaded");}, false);
这适用于所有网页上的Firefox,但在某些情况下在Chrome上根本不起作用。
这个网站就是一个例子:http://lexin.nada.kth.se/lexin/ 在地址中输入链接并按Enter键,正常加载页面但不会弹出警报。如果按F5刷新页面,则会出现弹出窗口。
对这种奇怪的行为有什么解释吗?
答案 0 :(得分:7)
问题的原因是,当文档已经完全加载时,有时会执行内容脚本。使用以下内容脚本(“用户脚本”)说明了这一点:
// ==UserScript==
// @name Test
// @namespace Test
// @include *
// ==/UserScript==
window.addEventListener('load', function(){alert("loaded");}, false);
alert(document.readyState); // When this prints "complete", onload never runs
要解决此问题,请使用@run-at document-start
元规则,这会导致脚本在创建文档之前执行:
...
// @run-at document-start
// ==/UserScript==
答案 1 :(得分:0)
此调用可能在页面上加载太晚。将此代码添加到页面的最顶部,看看是否可以修复它。
如果不是,请发布一些其他信息。 (正在进行调用的地方?页面上的更多信息?是从外部.js文件调用的吗?)