Chrome扩展程序 - Document.getelementbyId(...)评估为null?

时间:2017-07-02 21:58:59

标签: javascript google-chrome

在控制台中,我可以输入document.getElementById(' ...')并获取值。甚至.textContent并获取我想要的字符串。

一旦我将其弹出到我的chrome扩展程序并运行它,它会将document.getElementById(' ...')评估为null。什么了?

Manifest.json:

 {
   "name": "CSUF RMP",
  "version": "0.1",
  "manifest_version" : 2,
  "description": "Displays professor ratings on icon click",
  "background" : {
     "scripts" : ["background.js"]

   },
  "browser_action": {
    "default_icon": "icon16.png"
   },

  "content_scripts": [
        {
            "matches": ["https://mycsuf.fullerton.edu/*"],
            "js": ["script.js"]

        }
    ],

   "permissions": ["<all_urls>", "*://*/*", "http://*/*", "https://*/*"]
}

Background.js:

chrome.browserAction.onClicked.addListener(function(tab) {
   chrome.tabs.executeScript(null, {file: "script.js"});
 });

我的script.js就是我在顶部发布的内容。该脚本应该可以访问网页的DOM(因此我需要一个内容脚本)并在点击图标(因此为background.js)时运行它

我可以让页面运行并显示警告或其他内容,但该行不是评估页面的dom,只是null。

1 个答案:

答案 0 :(得分:0)

我想我知道这里有什么问题,

您正在执行script.js,就像普通脚本一样,普通脚本无法与页面DOM交互,您可以将其视为仅从文件运行脚本 - 它没有内容脚本这样的特权。

您可以做的是打开一个新标签(使用内容脚本的网址),然后在该新标签页上传递一条消息,告诉他在那里运行特定功能。

您可以在不使用邮件发送的情况下对其进行测试,方法是将内容脚本的onload设置为:cont = 'y' while cont=='y': nameone = str(input("Please enter a student name or '*' to finish: ")) while nameone != "*": scoreone = int(input("Please enter a score for " + nameone +": ")) if scoreone < 0: print("positive integers please!") break else: scoretwo = float(input("Please enter another score for "+nameone+": ")) scorethree = float(input("Please enter another score for "+nameone+": ")) testscores = scoreone + scoretwo + scorethree avg = testscores / 3 print("The average score for",nameone,"is ",avg) if nameone == "*": print("no bueno") # I have no idea what that means. cont = input("continue?(y/n)") ,然后从后台页面打开新标签:onload=alert(document.getElementById('...'));

告诉我它是怎么回事:))

编辑:忘记提及您需要清单文件中的'标签'权限才能打开新标签并对其进行测试。