Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止在窗口上附加多个处理程序_Javascript_Event Handling - Fatal编程技术网

Javascript 如何防止在窗口上附加多个处理程序

Javascript 如何防止在窗口上附加多个处理程序,javascript,event-handling,Javascript,Event Handling,我有一个JS文件,它在一个网站上被收录了两次 由用户包含 由我的Chrome扩展注入 JS代码在窗口上附加一个事件侦听器。由于上面解释的明显原因,此事件侦听器被触发两次而不是一次 此代码似乎工作正常,但我想知道正确的方法 if (typeof customMessageEventListenerAdded == 'undefined') { addListener(window, 'message', handleMessage); customMessageEventLis

我有一个JS文件,它在一个网站上被收录了两次

  • 由用户包含
  • 由我的Chrome扩展注入
JS代码在窗口上附加一个事件侦听器。由于上面解释的明显原因,此事件侦听器被触发两次而不是一次

此代码似乎工作正常,但我想知道正确的方法

if (typeof customMessageEventListenerAdded == 'undefined') {
    addListener(window, 'message', handleMessage);
    customMessageEventListenerAdded = true;
}

我想知道如何正确处理这种情况。

我通常这样编写脚本(我通常编写JS来定制Dynamics CRM,但同样的方法应该适合“普通”网页):

多个包含项使
if
go
false
并跳过代码(显然
script
应该是唯一标识符)。所有代码都封装在函数中,我可以控制调用什么以及何时调用和完成


还有其他方法(例如,可以利用
requirejs
,仅举一个例子)。

+1个不错的方法。我想我可以去。更好的方法。让我们等待其他人加入更好的方法(如果存在),否则我会接受
if (typeof (window.theScript) == 'undefined') {
    window.theScript = {
        someValue: ...;
        someFunction: function(){ ... };
        ctor: function(){ ... };
    };
    window.theScript.ctor();
}