0

送去我的瀏覽器擴展程序,我試圖張貼選定的文本到PHP網頁。在這個網站上解決了一個問題(Chrome Extension: how to capture selected text and send to a web service)在實現這一點方面幫了我很大忙,但我想用不同的方式發佈文本。
而不是像那裏提到的XMLHttpRequest,我想從內容腳本發送隱藏的JS表單。此方法允許我在將文本導入數據庫之前查看或更改文本。執行內容腳本的功能,如果響應從背景

的問題是從背景到內容腳本得到了扳機。我已經有了一條消息,所以需要使用函數(響應)。但是,在「sendMessage」之外,我無法聽到response.cmd。而在「sendMessage」裏面,我無法獲得response.cmd來觸發一個函數。有沒有解決方案,除了從後臺腳本發送全新的消息? 我指的是代碼:

Background.js

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { 
    if(request.cmd == "createSelectionMenu") { 
    sendResponse({cmd: "saveText"}); //Do things 
    } 
}); 

Content_script.js

chrome.extension.sendMessage({ cmd: "createSelectionMenu", data: selectedText }, 
    function(response) { 
    if(response.cmd == "saveText") { 
     createForm(); 
    } 
    } 
}); 

回答

1

我做的是什麼如下:

我保持打開的標籤

的軌道

內容腳本

// connect to the background script 
var port = chrome.extension.connect(); 

背景腳本

// a tab requests connection to the background script 
chrome.extension.onConnect.addListener(function(port) { 
    var tabId = port.sender.tab.id; 
    console.log('Received request from content script', port); 

    // add tab when opened 
    if (channelTabs.indexOf(tabId) == -1) { 
    channelTabs.push(tabId); 
    } 

    // remove when closed/directed to another url 
    port.onDisconnect.addListener(function() { 
    channelTabs.splice(channelTabs.indexOf(tabId), 1); 
    }); 
}); 

現在,我可以在我的所有註冊標籤通知(即內容腳本)從我的背景腳本時一定作用發生了:

var notification = { foo: 'bar' }; 
for(var i = 0, len = channelTabs.length; i < len; i++) { 
    chrome.tabs.sendMessage(channelTabs[i], notification, function(responseMessage) { 
    // message coming back from content script 
    console.log(responseMessage); 
    }); 
} 

再次,在內容腳本的另一邊,你可以在這些消息中添加監聽器:

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { 
    if (request.foo == 'bar') { 
    executeStuff(); 
    // if a callback is given: 
    sendResponse && sendResponse('success'); 
    } 
}); 

這是一個因爲它在某些地方是多餘的。但我最喜歡這種方式,因爲你可以把它包起來,使它更容易一些。

如果你想看看我怎麼用這個,看看我在GitHub倉庫:chrome-extension-communicator

相關問題