【问题标题】:Attempting to build out an extension, but keep getting an error about missing id's?尝试构建扩展,但不断收到有关缺少 id 的错误?
【发布时间】:2016-10-03 20:19:34
【问题描述】:

这是我得到的控制台错误,它阻止我访问 DOM。我可以验证 id 是否存在,但不确定这是否是某种安全功能:\

【问题讨论】:

    标签: javascript google-chrome console google-chrome-devtools


    【解决方案1】:

    与此错误相关的 Facebook 实际上并未使用 jQuery 库。如果您在控制台中运行jQuery,您将收到错误消息。 $ 快​​捷方式实际上是另一个库的选择器。这就是您收到错误的原因。

    您可以使用内容脚本通过script 标签将 jQuery 库注入网页:

    var s = document.createElement('script');
    s.src = chrome.extension.getURL('path_to_jquery/jQuery.js');
    s.onload = function() {
        this.parentNode.removeChild(this);
    };
    (document.head || document.documentElement).appendChild(s);
    

    然后您将能够在页面本身上使用 jQuery,使用 jQuery('#id')。你可以为它定义一个新的快捷方式:

    var jq = jQuery.noConflict();
    jq('#id'); // using the new shortcut
    

    您还可以使用 jQuery 访问 DOM,方法是将 jQuery 作为内容脚本以及您的其他脚本。以下内容进入manifest.json

    "content_scripts": [
        {
          "matches": ["http://*/*","https://*/*"],
          "js": ["jquery-1.12.4.min.js", "your_script.js"]
    

    your_script.js 中,您应该可以正常使用jQuery,因为上下文与实际页面不同,因此与$ 变量没有冲突。您可以通过将top 更改为扩展本身来将console 上下文设置为扩展。

    【讨论】:

    • 您是否有办法将其仅用于控制台,用于测试目的?我可以换掉“chrome.extension.getURL('path_to_jquery/jQuery.js');”吗?有 CDN 的部分?
    • 另一件事是,即使使用诸如 "document.getElementsByClassName("_xd7").style.color = "red"; "之类的东西,我也会收到无法设置未定义错误的属性。
    • @BrandonKorenek 如果您只想在控制台中快速测试,只需获取一个缩小的 jQuery 库的副本并将其运行到控制台中,然后使用 jQuery()。如果您想将其永久保存在页面中,请使用我展示的第一种方法,您可以使用 CDN 或将其打包在扩展程序本身中。
    • @BrandonKorenek getElementsByClassName() 返回元素的集合,因此您必须循环修改每个元素的样式。要访问第一个,请在索引 0 处访问它。
    • 非常感谢!一切正常。我认为在课堂情况下可能让我感到困惑的是,我在尝试读取 DOM 时有一点延迟。在我让窗口保持空闲大约 10 秒后,它允许通过 getElementById(); 进行更改;
    猜你喜欢
    • 1970-01-01
    • 2017-11-20
    • 2016-05-22
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    相关资源
    最近更新 更多