代码之家  ›  专栏  ›  技术社区  ›  ThePiGuy

当用各种脚本注入带有googlechrome扩展的HTML模板时,jQuery似乎不会导入

  •  1
  • ThePiGuy  · 技术社区  · 5 年前

    更详细地说,我在我的Google Chrome扩展中注入并加载了一个HTML模板,如下所示:

        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
            // Typical action to be performed when the document is ready:
                
                var PBSKPage = xhttp.responseText;
                document.querySelector('html').innerHTML = "";
                loadPBSKPage();
                function loadPBSKPage() {
                    
                    document.querySelector('html').innerHTML = PBSKPage;
                }
            }
        };
    function insertAndExecute() {
        var scripts = Array.prototype.slice.call(document.getElementsByTagName("script"));
        for (var i = 0; i < scripts.length; i++) {
            if (scripts[i].src != "") {
                var tag = document.createElement("script");
                tag.src = scripts[i].src;
                document.getElementsByTagName("head")[0].appendChild(tag);
            }
            else {
                eval(scripts[i].innerHTML);
            }
        }
    }
    

            <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
            <script>window.jQuery || document.write('<script src="chrome-extension://niabfndainielhgpcjenbpodannhfofj/2015/pbsk_resources/wildkratts/js/vendor/jquery-1.11.0.min.js"><\/script>')</script>
            <script src="chrome-extension://niabfndainielhgpcjenbpodannhfofj/2015/pbsk_resources/wildkratts/js/vendor/jquery.nivo.slider.pack.js" type="text/javascript"></script>
            <script src="chrome-extension://niabfndainielhgpcjenbpodannhfofj/2015/pbsk_resources/wildkratts/js/vendor/jquery.touchSwipe.min.js" type="text/javascript"></script>
            <script src="chrome-extension://niabfndainielhgpcjenbpodannhfofj/2015/pbsk_resources/wildkratts/js/vendor/retina.min.js"></script>
    ...
    

    jQuery似乎没有导入,当执行JS文件时,浏览器总是在导入jQuery时定义的内容上抛出一个未捕获的TypeError。

    那我该怎么办?是因为CSP吗?是因为insertAndExecute()函数吗?这是因为googlechrome扩展的内在工作机制吗?我想我可以将jqueryjs粘贴到每个依赖jQuery的JS文件中,但是这样做效率不高。有人能解决这个问题吗?

    2 回复  |  直到 5 年前
        1
  •  1
  •   maxxioso    5 年前

    我没有足够高的代表对上面的答案发表评论,但是将jQuery与您的代码和希望使用的库捆绑在一起就可以了。也就是说,使用jQuery的最新版本可能是一个好主意,因为从版本1.11开始,jQuery已经收到了许多重要的安全补丁。

        2
  •  1
  •   Andrew    5 年前

    是的,这是CSP的一个问题,因为chrome不希望人们链接外部库并在以后恶意更改它们。您可以获取jQuery库并显式地将其添加到项目中,但需要更多的工作:(