gpt4 book ai didi

javascript - 只执行一次函数

转载 作者:行者123 更新时间:2023-11-30 13:15:38 24 4
gpt4 key购买 nike

我正在编写一个 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++;

也是,但是这些方法都不行。

我做错了什么?我现在在欧洲 - 现在是晚上,所以我稍后会回答你的问题。

最佳答案

问题是您的整个 Greasemonkey 脚本执行了不止一次。 Greasemonkey 将在 iframe 上运行,就像它们是主页一样——如果 iframe 与 @include 匹配, @exclude , 和 @match脚本的指令。

尝试像这样跟踪状态是没有意义的,该函数在每次脚本执行时只会运行一次,除非您故意多次调用它(问题中未显示)。并且脚本通常不能在执行实例之间共享信息(这里也不需要)。

此外,无需使用 jQuery(document).ready()因为,除非您将脚本注入(inject)目标页面,否则 Greasemonkey 会在 document.ready 触发默认情况下。

解决多次运行问题:

  1. 调整您的 @include , @exclude , 和 @match尽可能多地消除不需要的 iframe 的指令。
  2. 在脚本顶部附近添加如下代码:

    if (window.top != window.self)  //-- Don't run on frames or iframes.
    return;

关于javascript - 只执行一次函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12117902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com