我想解决以下问题:
我有一个弹出窗口,在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"
保存到localstorage。
然后,在background.html
我希望将数据从localstorage传递到我的内容脚本,如下所示:
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);
}
});
});
}
在此之后,我的脚本应该捕获请求,然后发送一个带有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获得,所以我认为这不应该是一个问题。
流程:
"Save Btn"
中的popup.html
,然后popup.js
保存
“table_7”到localStorage 然后点击popup.html
中的“运行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
并将其发送回背景页面。
问题是,当我运行流程时,我收到此警报:
有人可以帮助我,如何解决这个问题? :/谢谢
答案 0 :(得分:0)
我找到了解决方案:
<强> popup.js:强> 使用保存按钮,我保存选择值(=“* table_7 *”),然后重新加载选定的选项卡:
$("#save_btn").click(function(){
if($("#chart_select :selected").val()!="default"){
var sel_val = $("#chart_select :selected").val();
localStorage.setItem('thetable',sel_val);
chrome.tabs.getSelected(null,function(tab){
chrome.tabs.reload(tab.id);
});
}
});
<强> content_script.js:强>
// SEND DOM structure to the background page
chrome.extension.sendRequest({ action: "waiting" },function(response){
if(response){
chrome.extension.sendRequest({ dom: document.getElementById(response.thetable).innerHTML });
}
});
<强> background.html:强>
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if(request.action=="waiting"){
sendResponse({thetable:localStorage.getItem('thetable')});
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if(request.dom){
localStorage.setItem('thedom',request.dom);
}
});
}
});
完成工作,我在popup.js中处理数据。 注意:数据现在位于localStorage('thedom')