我正在为Chrome扩展程序编写ContentScript。在脚本中,我想导入一个JavaScript(实际上是JS和CSS)并从该脚本启动一个类。
为了确保正确加载Java脚本,我遵循了this,this和this等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...
。
由于作为Chrome扩展程序只是一个错误,而不是在控制台中,因此我在这里有些迷失。 jQuery相关的解决方案也欢迎在这里。