【问题标题】:Chrome Extension content script not accessing page's DOM in which it is injectedChrome 扩展内容脚本未访问注入它的页面的 DOM
【发布时间】:2012-06-17 20:35:02
【问题描述】:

我正在尝试从用户正在查看的页面中提取数据并将该数据发送到扩展弹出窗口。我在从当前页面提取信息时遇到了麻烦。在查看了谷歌代码教程后,我设置了我的清单和内容脚本,如下所示。当我转到一个跨度为 id="cmets" 的测试页面时,来自注入内容脚本的变量总是以 null 结束。有人知道我可能会错过什么吗?谢谢!

manifest.json
=================
{
    "name": "Sample Extension",
    "version": "0.0.1",
    "description": "Sample extension",
    "icons": {"128": "icon.png"},
    "permissions": [
        "tabs", "<all_urls>"
    ],
    "browser_action": {
        "default_icon": "browseraction.png",
        "default_title": "Sample",
        "popup": "popup.html"
    },
    "content_scripts": [
        {
            "matches": ["http://*/*", "<all_urls>" ],
            "js": ["scripts/contentscript.js"]
        }
    ]
}

contentscript.js
===================
var comments = document.getElementById("comments");
alert( comments.innerText );

【问题讨论】:

    标签: dom google-chrome-extension content-script


    【解决方案1】:

    可能在执行脚本后加载 cmets。

    尝试在清单中设置:

            "run_at" : "document_end",
    

    或者,如果您怀疑 AJAX 加载,请稍后使用 setTimeout 调用您的代码。

    当然,最好的方案取决于精确的页面及其内部工作。

    【讨论】:

    • 谢谢,伙计们!我利用了这两个建议,使用“run_at”和“textContent”,它们运行良好。
    • innerText 是chrome扩展开发者手册中提倡的。 ——这里不用避讳。
    • @Xan 说到innerText,Chrome 现在支持它,这就是我缩短答案的原因。
    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    相关资源
    最近更新 更多