我正在编写一个greasemonkey脚本,并且只想在页面加载后调用 start 函数 - 这是针对facebook的。首先,我开始使用以下代码:
function start(){
alert("hello");
}
start();
start()函数执行了一次以上。所以我将代码更改为以下内容:
jQuery.noConflict();
window.stoop = 0;
jQuery(document).ready(function(){
if(window.stoop == 0){
start();
}
window.stoop = 55;
//or window.stoop++;
});
function start(){
alert("hello");
}
问题是window.stoop值不会改变。
我试过
var stoop = 0;
stoop++;
和
var obj = {};
obj.stoop = 0;
obj.stoop++;
,但这些方式都不起作用。
我做错了什么?我现在在欧洲 - 那天晚上,所以我稍后会回答你的问题。
答案 0 :(得分:3)
问题是您的整个Greasemonkey脚本不止一次执行。 Greasemonkey将在iframe上运行,就好像它们是主页一样 - 如果iframe与脚本的@include
,@exclude
和@match
指令匹配。
尝试跟踪这样的状态是没有意义的,该函数只会在每次执行脚本时运行一次,除非您故意多次调用它(问题中没有显示)。并且脚本通常不能在执行实例之间共享信息(这里也不需要)。
此外,无需使用jQuery(document).ready()
,因为除非您将脚本注入目标页面,否则Greasemonkey默认会在document.ready
处触发。
解决多次运行问题:
@include
,@exclude
和@match
指令,以尽可能多地消除不需要的iframe。 在脚本顶部附近添加这样的代码:
if (window.top != window.self) //-- Don't run on frames or iframes.
return;