即使在脚本加载中,对象仍未定义

时间:2019-07-03 15:59:01

标签: javascript jquery google-chrome google-chrome-extension content-script

我正在为Chrome扩展程序编写ContentScript。在脚本中,我想导入一个JavaScript(实际上是JS和CSS)并从该脚本启动一个类。

为了确保正确加载Java脚本,我遵循了thisthisthis等SO帖子的指导。

var link = document.createElement( "link" );
document.body.appendChild(link);

link.onload = function(){
    console.log("link loaded");

    var script = document.createElement('script');
    document.body.appendChild(script); //or something of the likes

    script.onload = function () {

        ...
        console.log("script loaded");
        // somehow ContentTools is undefined even after the script is loaded
        editor = ContentTools.EditorApp.get();
        editor.init('*[data-editable]', 'data-name');   
        console.log("all finished")
    };
    script.src = "https://....min.js";

};    
link.href = "https://....min.css";
link.type = "text/css";
link.rel = "stylesheet";

我假设在嵌套的onload的最内层调用ContentTools.Editor的这种方式是一种确保正确加载正确的CSS和JS依赖关系的好方法。但是,当我将其作为contentscript中的Chrome扩展程序运行时,它以Undefined ContentTools作为referenceerror出错,但是我看到消息“链接已加载”和“脚本已加载”。

很显然,ContentTools已加载并定义(请参见屏幕截图)。而且,如果我直接在控制台中执行整个脚本,则一切正常。看起来根本原因只是在Chrome扩展程序内容脚本中,在完全加载脚本之前以某种方式调用了editor = ContentTools...

enter image description here

由于作为Chrome扩展程序只是一个错误,而不是在控制台中,因此我在这里有些迷失。 jQuery相关的解决方案也欢迎在这里。

0 个答案:

没有答案