【发布时间】:2012-05-06 03:14:07
【问题描述】:
我想解决以下问题:
我有一个弹出窗口,在popup.html 中有一个选择标签:
<select id="chart_select">
<option id="chart_0" value="default">Select One</option>
<option id="chart_1" value="table_1">DISPLAY CLIENT VERSION USAGE CHART</option>
<option id="chart_2" value="table_2">DISPLAY MOST ACTIVE REALMS CHART</option>
<option id="chart_3" value="table_3">DISPLAY MOST ACTIVE USERS CHART</option>
<option id="chart_4" value="table_4">DISPLAY AVERAGE USER FRAMERATE CHART</option>
<option id="chart_5" value="table_5">DISPLAY AVERAGE REALM FRAMERATE CHART</option>
<option id="chart_6" value="table_6">DISPLAY USER LOGGED IN '' TIMES CHART</option>
<option id="chart_7" value="table_7">DISPLAY LOGINS per ORGANISATION</option>
</select>
所以,我将所选值保存到localStorage['thetable']。例如,我选择 DISPLAY LOGINS per ORGANISATION ,然后将 "table_7" 保存到本地存储。
然后,在background.html 中,我想将数据从本地存储传递到我的内容脚本,如下所示:
if(localStorage.getItem('thetable') != ""){
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendRequest(tab.id, {thetable: localStorage.getItem('thetable') }, function(response) {
if(response.dom != ""){
localStorage.setItem('thedom',response.dom);
}
});
});
}
在此之后,我的 contentscript 应该捕获请求,并返回一个带有 dom 的响应,该 dom 由一个 id 指定,存储在 localStorage('thetable') 中。
contentscript.js:
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.thetable != "") {
sendResponse({dom: document.getElementById(request.thetable).innerHTML});
}
});
注意: request.thetable 应该是“table_7”。 dom 应该是站点的<table id="table_7"> 的innerHTML。它存在,我制作了所有这些元素。
还有一个附加信息,我将选择值保存在另一个文件中,popup.js,并将“table_7”保存到此文件中的 localStorage。但是 localStorage 也可以从 background.html 获得,所以我认为这应该不是问题。
流程:
- 我选择了一些东西(例如:显示每个组织的登录信息)
- 我点击
popup.html中的"Save Btn",然后popup.js保存 “table_7”到本地存储 -
然后我点击
popup.html中的“Run Btn”,然后popup.js重新加载 当前标签:chrome.tabs.getSelected(null, function(tab) { chrome.tabs.reload(tab.id); });
我这样做,因为我的内容脚本仅在选项卡时收集信息 重新加载。
重新加载后,我认为
background.html应该发送请求到contentscript带有信息 ("table_7")contentscript 从站点获取 DOM,f.e:
document.getElementById("table_7").innerHTML并将其发送回后台页面。
问题是,我在运行流程时收到此警报:
谁能帮助我,如何解决这个问题? :/ 谢谢
【问题讨论】:
-
建议不要重新加载选项卡来激活内容脚本,而是使用
chrome.tabs.executeScript(tab.id,{file:'name_of_script.js'});来运行内容脚本。 -
然后我在控制台中得到
Error during tabs.executeScript: Unknown error. chromeHidden.handleResponse。顺便问一下,如何强制后台脚本发送请求? -
你能发布一个最小的测试用例(包括清单文件的相关部分)吗?
标签: javascript jquery google-chrome-extension