在我的第一次扩展中,我试图在我自己的MySQL数据库中保存用户论坛的注释,这基本上可以正常工作。
现在我遇到了这个问题:我需要一些额外的信息,这些信息应该在后台收集,而不会让人感到不安。用户(相同的域,但HTTPS)。 我尝试在后台页面中使用iframe执行此操作,应该在iframe中加载一个页面,然后从那里收集一些信息,然后在iframe中加载另一个页面,并从那里收集一些其他信息我想出了这个:
内容脚本:提交按钮触发后台页面以在iframe中加载网址
背景页面:在iframe中加载网址,并向内容脚本发送消息,表明其已完全加载
内容脚本:接收消息,从iframe收集信息 并将其发送到后台页面。然后再一次同样的事情。最后通过$ post到我的服务器的背景页面信息。
事实上,这种乒乓球通讯并不适合我。 bg.js收到信息,但我无法将其发送回内容脚本。可能,我不知道哪个脚本准备好接收信息,何时内容脚本从活动选项卡获取信息以及何时从后台脚本中获取iframe信息。
我注意到内容脚本在重新加载扩展时从iframe获取信息。
清单:
{
"manifest_version": 2,
"name": "SaveMyCommenz",
"version": "1.0",
"description": "SMC",
"version": "1",
"browser_action": {
"default_icon": "icons/icon-19.png",
"default_popup": "popup.html"
},
"icons": {
"48": "icons/icon-48.png",
"96": "icons/icon-96.png"
},
"content_scripts": [
{
"matches": ["*://*.example.com/*"],
"js": ["jquery.min.js", "smc.js"],
"run_at": "document_end",
"all_frames": true
}
],
"background": {
"scripts": ["bg.js"]
},
"permissions": [
"http://example.me/*",
"https://example.me/*",
"tabs"
]
}
smc.js(内容脚本)
// ################# MESSAGE PASSING ##########################
document.addEventListener("submit",function(){
// tell bg.js to load site1 in iframe
chrome.runtime.sendMessage('1');
//...
}
chrome.runtime.onMessage.addListener(function(response, sender, sendResponse) {
if (response == '2'){// get Info1
//get info1
var link = document.querySelector("a[href*='permalink']");
// send info1 to bg.js...
//tell bg.js to load 2nd site in iframe
chrome.runtime.sendMessage('3');
}
if (response == '4'){// get Info2
var link = document.querySelector("a[href*='permalink']");
// send info2 to bg.js...
}
});
bg.js(背景脚本)
load_iFrame();
function load_iFrame() {
var iframeX = document.createElement("iframe");
iframeX.setAttribute("src", "https://example.com");
iframeX.style.width = "90%";
iframeX.style.height = "500px";
document.body.appendChild(iframeX);
}
// ################# MESSAGE PASSING ##########################
chrome.runtime.onMessage.addListener(function (response, sender, sendResponse) {
//console.log("in bg.js angekommen: " + response.a);
if (response == '1') {
//chrome.runtime.reload(); // Kommentarseiten laden
// load site 1
window.frames['iframeX'].location = "https://example.com?page=1";
// reload?
// tell content script that site is fully loaded
chrome.tabs.query({
active: true,
currentWindow: true
}, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, {
"2"
});
});
}
if (response == '3') {
// load site 2
window.frames['iframeX'].location = "http://example.com?page=2";
// reload?
// tell content script that site is fully loaded
chrome.tabs.query({
active: true,
currentWindow: true
}, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, {
"4"
});
});
}
});
var kom = document.querySelectorAll("a[href*='permalink']");
var i;
const kommentarSta = new Array;
for (i = 0; i < kom.length; i++) {
kommentarSta[i] = kom[i].innerText;
console.log("Kommentar" + i + ": " + kommentarSta[i]);
}
我何时以及如何重新加载哪个页面或应该进行哪些通信?
答案 0 :(得分:0)
if (response.a == '1'){
load_iframe();
//chrome.runtime.reload();
window.frames['iframeX'].location = "https://derstandard.at/userprofil/postings?ortMode=1&groupMode=2&pageNumber=2";
}
function load_iFrame() {
var iframeX = document.createElement("iframe");
iframeX.setAttribute("src", "https://derstandard.at/userprofil/postings?sortMode=1&groupMode=2&pageNumber=1");
iframeX.style.width = "90%";
iframeX.style.height = "500px";
document.body.appendChild(iframeX);
}
bg.js应该等待来自内容脚本的message = 1,然后在iframe中加载新页面,但它没有。它说iframeX不存在。当我在bg.js中没有iframe之前重新加载时:/ 请求帮助