来自外部脚本的对象在ie和firefox中未定义

时间:2018-02-07 17:51:08

标签: javascript

我正致力于构建一个javascript小部件,用户可以将这些小部件包含在他们的网站上,这些小部件将显示来自我们网络应用程序的数据。用户将包含w1.js的主文件包含以下内容:

var MYLIBRARY = MYLIBRARY || (function(){

    var _args = {};
    var jQuery;

    function main(){

        //simply display loaded jquery version as a test
        jQuery('#mylibrary-w1-content').text(jQuery.fn.jquery);

    }

    function scriptLoadHandler(){

        jQuery = window.jQuery.noConflict(true);
        main();

    }

    return {

      init: function(Args){

          _args = Args;

          if(window.jQuery === undefined || window.jQuery.fn.jquery !== '3.3.1'){

              var script_tag = document.createElement('script');
              script_tag.setAttribute("type", "text/javascript");
              script_tag.setAttribute("src", "//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js");

              if(script_tag.readyState){

                  script_tag.onreadystatechange = function(){ // for old versions of ie

                      if(this.readyState === 'complete' || this.readyState === 'loaded'){
                          scriptLoadHandler();
                      }

                  };

              } else {
                  script_tag.onload = scriptLoadHandler;
              }

              (document.getElementsByName("head")[0] || document.documentElement).appendChild(script_tag);

          } else {

              jQuery = window.jQuery;
              main();

          }

      }  

    };



/* END OF LIBRARY
*******************************************************************************/    
}());

用户在其网站上包含的代码如下:

<script src="//thewebsite.com/widgets/w1.js"></script>
<script>
    window.addEventListener('load', function(){MYLIBRARY.init(["somevalue"]);}, false);
</script>
<div id="mylibrary-w1-content"></div>

所有内容都按照预期在chrome中运行,但ie和firefox(认为这只是一个问题,直到它没有在firefox中工作,认为这很奇怪)在控制台中返回错误消息{{1} }。

我最初的想法是ReferenceError: MYLIBRARY is not defined在调用w1.js之前没有完成加载,但MYLIBRARY似乎按预期运行,除非我错过了某些内容或我做错了什么。

任何想法?

1 个答案:

答案 0 :(得分:0)

经过一些额外的故障排除后,我发现了导致此问题的原因。它与javascript无关。从w1.js加载的URL是一个使用自签名ssl证书的内部测试站点。这不是在firefox中工作的原因,或者是因为firefox中不存在此证书的例外,或者因此,当调用时,文件从未返回。添加例外解决了这个问题。