如何解决Chrome扩展程序在点击时引发DOM事件的问题?

时间:2019-02-14 12:49:34

标签: javascript google-chrome-extension

我有一个chrome扩展程序,单击该按钮后便会触发,即使页面已明确加载,该扩展程序仍无法访问DOM元素。

我看到其他帖子说这是因为元素是动态创建的,但不是我的情况。

唯一有效的方法是将我的debugTools.js包装为一个超时,并在800毫秒左右后将其触发。

debugTools.js中的代码不起作用。我不明白为什么即使在单击执行代码的按钮之前等待了10分钟,仍然说“ theWrapper”未定义。

在单击我的按钮之前,

wrapper确实存在于我导航到的页面上。它在常规HMTL代码中。不是动态生成的。我觉得发布此页面代码只会使这个问题感到困惑。

// manifest.json
{
    "name": "Jams Dev Tools",
    "version": "1.0",
    "description": "Provides dev tools",

    "background": {
        "scripts": ["background.js"],
        "persistent": true
    },

    ... // icons are included here

    "manifest_version": 2,

    "web_accessible_resources": [
        "debugTools.css",
        "debugTools.js"
    ],
    "permissions": [
    "https://*/*",
    "http://*/*",
    "tabs",
    "activeTab"
    ]
}
// debugTools.js

var theWrapper = document.getElementById("wrapper");
console.log(theWrapper.style.width);

// injectFiles.js

if(document.getElementById("debugJs") == undefined) {
    // Inject Css
    var debugJs = document.createElement('script');
    var theSource = chrome.extension.getURL("debugTools.js");
    debugJs.setAttribute( 'src', theSource );
    debugJs.id = "debugJs";
    document.body.appendChild(debugJs);
}
// background.js

chrome.browserAction.onClicked.addListener(function (tab) {
    // for the current tab, inject the "inject.js" file & execute it
    chrome.tabs.executeScript(tab.id, {
        file: 'injectFiles.js'
    });
});

1 个答案:

答案 0 :(得分:0)

好,所以这是您看不见树木的那一次。谢谢大家的帮助。原来我是个白痴。可以用下面的代码片段总结问题。

<Feb 13, 2019 2:27:56 PM EST> <Error> <HTTP> <BEA-101165> <Could not load user defined filter in web.xml: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.
java.lang.NoSuchMethodError: ognl.SimpleNode.isSequence(Lognl/OgnlContext;)Z
    at com.opensymphony.xwork2.ognl.OgnlUtil.isEvalExpression(OgnlUtil.java:356)
    at com.opensymphony.xwork2.ognl.OgnlUtil.checkEnableEvalExpression(OgnlUtil.java:467)
    at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecute(OgnlUtil.java:422)
    at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:334)
    at com.opensymphony.xwork2.ognl.OgnlUtil.internalSetProperty(OgnlUtil.java:663)
    Truncated. see log file for complete stacktrace