在控制台中,我可以输入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。
答案 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('...'));
告诉我它是怎么回事:))
编辑:忘记提及您需要清单文件中的'标签'权限才能打开新标签并对其进行测试。