3

我正在编写一个脚本,该脚本将作为插件在多个网站上使用。我必须只使用 Javascript,没有框架。我在问自己,什么是加载我的脚本而不会对可以在这些网站上加载的其他脚本或框架造成任何问题的最佳方式。我想做一个全局函数,在其中调用我想使用的函数,然后将此函数放在 window.load 事件上,如下所示:

<script>
    var global = function(){
    object.domain.function1();
    object.domain.function2(param1, param2);
    object.domain.function3(1);
}
(function(){
    if(document.addEventListener){
        document.addEventListener('load',global, false);
    }
    if(document.attachEvent){
        document.attachEvent('onload',global);
    }
})();
</script>

或者简单地说:

<script>
    object.domain.function1();
    object.domain.function2(param1, param2);
    object.domain.function3(1);
</script>

当然,我需要在我的页面上加载一些元素。提前致谢。

4

2 回答 2

2

如果您可以将 javascript 放入<body>标签中,那么在整个页面加载后运行 javascript 的一种相当可靠的方法是将您的 javascript 放入<script>页面最底部的标签中。

这不是我处理此问题的首选方式,但如果使用该onload事件对您来说不太合适,这将是一个很好的下一步。

于 2012-12-20T16:29:51.493 回答
1

什么是加载我的脚本而不会对其他脚本或框架造成任何问题的最佳方法

你需要考虑的事情是,你..

  • 污染命名空间
  • 阻碍另一个脚本

第二点很容易解决,.addEventListener支持为同一事件添加多个不会相互覆盖的侦听器。您可能对两种不同的事件感兴趣,'load'onwindow'DOMContentLoaded'on document。你总是可以把 a<script>放在最后,<body>但我个人不喜欢这样做,因为你正在将 HTML 与 JavaScript 混合或更改 DOM 树。

对于第一点,这可以通过使用匿名函数来完成,如果您需要占用命名空间,请将所有变量和方法保存在一个对象中以最小化您的影响。

把所有这些放在一起,你最终可能会得到这样的东西

var myObjectName = { // everything in one object in global namespace
    domain: {
        function1: function () { /*...*/ },
        function2: function () { /*...*/ },
        function3: function () { /*...*/ }
    }
};

(function (fn) {
    if (window.addEventListener) {
        window.addEventListener('load', fn, false);
    }
    else if (window.attachEvent) { // Consider if support for `.attachEvent` is really necessary, people need to move on.
        window.attachEvent('onload', fn);
    }
})(function () { // pass your function anonymously
    myObjectName.domain.function1();
    myObjectName.domain.function2(param1, param2);
    myObjectName.domain.function3(1);
});
于 2012-12-20T17:02:24.057 回答