2017-03-08 70 views
0

在我的第一個擴展中,我試圖將我的userforum的註釋保存在我自己的基本上可用的MySQL數據庫中。內容腳本/後臺腳本乒乓通信頭痛

現在我陷入了這個問題:我需要一些額外的信息,應該在後臺收集而不'干擾'用戶(同域但HTTPS)。 我試圖用背景頁面中的iframe來做到這一點,應該加載一個頁面在iframe中,然後從那裏收集一些信息,然後再加載另一個頁面,並從那裏收集一些其他信息。我想出了這個:

內容腳本:提交按鈕觸發後臺頁面加載URL中的iframe

背景頁:加載URL在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

聲明一個單獨的內容腳本,該腳本將被注入到iframe url中。聲明主要內容腳本僅在普通頁面URL(http)中運行。讓你的後臺頁面中繼消息。 – wOxxOm

+0

thx爲答案!我將如何聲明一個內容腳本以在iframe中運行?我的意思是那裏正常運行thx的https頁面! – bimbam

+0

hmm,我在iframe中加載的一個url是https,另一個http ...:/ – bimbam

回答

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應該等待內容文字訊息= 1,然後在iframe中加載新的一頁,但它不。它說iframeX不存在。當我在bg.js中沒有iframe的情況下重新加載時:/ thx尋求幫助

相關問題