如何在popup.html中异步加载外部javascript文件?

如何在popup.html中异步加载外部javascript文件?,javascript,asynchronous,google-chrome-extension,Javascript,Asynchronous,Google Chrome Extension,我已经完成了所有工作,但是在添加了一个外部javascript文件(顺便说一句,它只有几行短的长度)之后,它延迟了popup.html的加载 这种延迟很烦人,我认为通过异步加载javascript文件,它将消除这种延迟 文件以popup.html格式编写,如下所示: 我不确定如何异步加载此文件。那么我该怎么做呢?有两种解决方案: 将脚本标记移动到html页面的末尾 使用脚本标记上的defer属性,但较旧的浏览器不支持该属性 有两种解决方案: 将脚本标记移动到html页面的末尾 使用脚本标记上的

我已经完成了所有工作,但是在添加了一个外部javascript文件(顺便说一句,它只有几行短的长度)之后,它延迟了popup.html的加载

这种延迟很烦人,我认为通过异步加载javascript文件,它将消除这种延迟

文件以popup.html格式编写,如下所示:


我不确定如何异步加载此文件。那么我该怎么做呢?

有两种解决方案:

  • 将脚本标记移动到html页面的末尾
  • 使用脚本标记上的
    defer
    属性,但较旧的浏览器不支持该属性

  • 有两种解决方案:

  • 将脚本标记移动到html页面的末尾
  • 使用脚本标记上的
    defer
    属性,但较旧的浏览器不支持该属性

  • 延迟可能是因为源是一个安全的http(https)请求,而不仅仅是一个普通的http请求。根据您的具体托管计划,这可能会也可能不会产生影响。已经提出和提出了支持这一概念和相反观点的论点和证据

    我认为异步加载文件不会解决您的问题,因为您将发出相同的http请求。。。这就是AJAX所做的;它允许我们从服务器请求信息,而无需重新加载页面

    如果只是几行JS,那么为什么不将其包含在.html文档中呢


    另外,您还没有很好地描述您遇到的问题。也许您可以详细说明一下?

    延迟可能是因为源是一个安全的http(https)请求,而不仅仅是一个普通的http请求。根据您的具体托管计划,这可能会也可能不会产生影响。已经提出和提出了支持这一概念和相反观点的论点和证据

    我认为异步加载文件不会解决您的问题,因为您将发出相同的http请求。。。这就是AJAX所做的;它允许我们从服务器请求信息,而无需重新加载页面

    如果只是几行JS,那么为什么不将其包含在.html文档中呢


    另外,您还没有很好地描述您遇到的问题。也许您可以详细说明一下?

    因为您是为Chrome开发的,所以我确实理解在加载之前内联脚本的问题。 我写了这个AJAX(jQuery)代码片段,希望您会发现它很有用:

       $.ajax({
                type: "GET", //or post?
                url: "http://FOOBAR.COM",   //change the url obviously..
                datatype: "script", //identify the expected income 
                async: "true", //async is "true" by default, but let's make sure it's #t
                success: function(result) {
                    /**now we append the script to the document, nothing too special,
                       just pay attention we inject it INSIDE the item and not as the src**/
                    var scr = document.createElement('script');
                    scr.innerHTML = result;
                    document.body.appendChild(scr)
    
                },
                error: function(result) { 
                //a simple error handling using the same method we used for the success
                    console.log(result) 
                    var scr = document.createElement('script');
                    scr.innerHTML = "alert('ERROR!')";
                    document.body.appendChild(scr)
                }
    
           }); 
    

    由于您是为Chrome开发的,我确实理解在加载之前内联脚本的问题。 我写了这个AJAX(jQuery)代码片段,希望您会发现它很有用:

       $.ajax({
                type: "GET", //or post?
                url: "http://FOOBAR.COM",   //change the url obviously..
                datatype: "script", //identify the expected income 
                async: "true", //async is "true" by default, but let's make sure it's #t
                success: function(result) {
                    /**now we append the script to the document, nothing too special,
                       just pay attention we inject it INSIDE the item and not as the src**/
                    var scr = document.createElement('script');
                    scr.innerHTML = result;
                    document.body.appendChild(scr)
    
                },
                error: function(result) { 
                //a simple error handling using the same method we used for the success
                    console.log(result) 
                    var scr = document.createElement('script');
                    scr.innerHTML = "alert('ERROR!')";
                    document.body.appendChild(scr)
                }
    
           }); 
    

    您是将此引用添加到站点的母版页还是仅添加到popup.html页面?它仅在popup.html页面上。java脚本文件有多大?如果是一些小的东西,把它添加到你的主页上。就几行。(也不可能在Chrome扩展插件popup.html上添加javascript内联。Google禁用了内联javascript功能。)您是将此引用添加到站点的母版页还是仅添加到popup.html页面?它仅在popup.html页面上。java脚本文件有多大?如果是一些小的东西,把它添加到你的主页上。就几行。(另外,在Chrome扩展popup.html上添加javascript内联是不可能的。Google禁用了内联javascript功能。)让我试试。--更新:我添加了延迟属性并将脚本移动到页面末尾,但没有区别,仍然延迟。不仅如此,添加延迟标记使脚本无法正常工作。让我试试。--更新:我添加了defer属性并将脚本移动到页面末尾,但没有区别,仍然延迟。不仅如此,添加defer标记使脚本无法正常工作。它需要是外部的。这样我可以在扩展之外手动更新它。不仅如此,在popup.html中使用内联javascript是不可能的,因为谷歌已经在没有追索权的情况下禁用了这个功能问题在于,在谷歌浏览器中点击扩展插件的弹出按钮时会出现延迟。我希望如果我能在运行外部脚本之前(因此,在发出http请求之前)加载弹出窗口,那么我希望它能消除延迟。您是对的,是http(s)请求导致了延迟,而不是javascript文件的大小。这就是为什么我希望将脚本执行延迟到页面加载之后。顺便说一句,它必须是httpS。要访问popup.html中的外部javascript文件,必须使用该文件。你不能使用普通的http,否则我会使用。它需要是外部的。这样我可以在扩展之外手动更新它。不仅如此,在popup.html中使用内联javascript是不可能的,因为谷歌已经在没有追索权的情况下禁用了这个功能问题在于,在谷歌浏览器中点击扩展插件的弹出按钮时会出现延迟。我希望如果我能在运行外部脚本之前(因此,在发出http请求之前)加载弹出窗口,那么我希望它能消除延迟。您是对的,是http(s)请求导致了延迟,而不是javascript文件的大小。这就是为什么我希望将脚本执行延迟到页面加载之后。顺便说一句,它必须是httpS。要访问popup.html中的外部javascript文件,必须使用该文件。你不能使用普通的http,否则我会的。