Javascript:创建脚本不起作用

标签 javascript google-chrome createelement

我正在 Chrome 扩展上写作。我还需要检查 URL 是否在线。该 URL 返回一个变量,因此如果该 var 为 true,则该 URL 在线。

如果 URL 离线,大约需要 2 秒才会出现错误,因此扩展弹出窗口每次都需要 2 秒才能启动。

这是我的“旧”版本:

popup.html:

<script language="javascript" src="http://example.org/jdcheck.js"></script>
<script language="javascript" src="popup.js"></script>

popup.js:

if (variable) { [...] }

好吧,2 秒后就成功了。

现在我有了一个想法,所以我删除了 popup.html 中的 scriptlink。 这就是我的新 popup.js:

background.$(document).ready(function() {


      var jq = document.createElement('script'); jq.type = 'text/javascript';
      jq.src = 'http://127.0.0.1:9666/jdcheck.js';
      document.getElementsByTagName('head')[0].appendChild(jq);

  if(jdownloader){
         [...action]
  }  
});

你看,我使用 jQuery 来加载 Checkfile。

现在,它抛出一个错误:

Uncaught ReferenceError: jdownloader is not defined 

嗯,看起来 createElement 不起作用。 我 100% 确定该 URL 为我提供了我想要的变量。

你能帮我一下吗?我不知道如何解决这个问题..

谢谢! 马库斯

<小时/>

编辑:我删除了 jQuery 部分,添加了 keepGoing 和 jq.onload:

    function keepGoing() {

      console.log("JS should have been loaded");

      if(jdownloader){

        [action]
      }  
    }  

      var jq = document.createElement('script');
      jq.onload = keepGoing();
      jq.src = 'http://127.0.0.1:9666/jdcheck.js';
      document.getElementsByTagName('head')[0].appendChild(jq);

现在,控制台给了我这个:

JS should have been loaded popup.js:98
Uncaught ReferenceError: jdownloader is not defined popup.js:100

所以看起来 jdownloader var 没有传递给 popup.js。 为什么为什么?!我不知道。

马库斯

最佳答案

当您将脚本标记附加到 DOM 时,代码不会等待浏览器下载并评估脚本然后继续。

所以你必须回来检查。在 Chrome 中,您可以在 script 元素上使用 load 事件。

background.$(document).ready(function() {

    var jq = document.createElement('script'); jq.type = 'text/javascript';
    jq.onload = keepGoing; // Or an anonymous inline function if you prefer
    jq.src = 'http://127.0.0.1:9666/jdcheck.js';
    document.getElementsByTagName('head')[0].appendChild(jq);

    function keepGoing() {
        if(jdownloader)...
    }  
});

(“在 Chrome 上”,因为在旧版本的 IE 中,script 没有触发 load 事件,而是触发了 readystatechange。)

<小时/>

旁注:如果是 text/javascript,则不必提供 type 属性。这就是并且一直都是默认设置。

关于Javascript:创建脚本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19180000/

相关文章:

google-chrome - 在 Chrome 中禁用 "Fit to Page"

javascript - 停止创建div时Jquery可拖动

javascript - 用 javascript 插入的新元素可以通过 view-source 看到吗?

Javascript createElement 和appendchild 一步完成

javascript - 使用 jQuery 删除表数据

javascript - 如何更改函数以将其操作限制为 id、类或选择器

javascript - 在 JavaScript 中解析 DateTime 字符串

javascript - 在客户端 JavaScript 代码中重用 Node.js 中的 Web 模型

javascript - HTML5 : Filesystem API Chrome 30 - Unexpected errorHandler call

javascript - document.execCommand ('copy' ) 在 Chrome 上不工作