我有这个想法传递数据形成注入脚本(getDOM.js)我background.js从执行的脚本将数据传递到后台的Chrome扩展
bacgkround.js
chrome.contextMenus.onClicked.addListener(function(info, tab){
chrome.tabs.executeScript(tab.id, {file: "getDOM.js"})
});
chrome.contextMenus.onClicked.addListener(function(info, tab){
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {greeting: "GetURL"}, function(response) {
alert(response.navURL);
});
});
});
getDOM.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.greeting === "GetURL")
sendResponse({navURL:'test'});
});
,你可以看到我用按摩功能来传递数据,而T3这是一个问题。我不能在正确的时间获得数据,我会通过background.js以前的数据
内容必须是动态的(不是特定的“测试”),每次它会提醒以前的数据。想象一下,getDOM.js会传递选定的文本,这个代码将会通过先前选择的文本。我怎样才能解决这个问题 ?
我的动态数据,例如:
function getHTMLOfSelection() {
var range;
if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
return range.htmlText;
}
else if (window.getSelection) {
var selection = window.getSelection();
if (selection.rangeCount > 0) {
range = selection.getRangeAt(0);
var clonedSelection = range.cloneContents();
var div = document.createElement('div');
div.appendChild(clonedSelection);
return div.innerHTML;
}
else {
return '';
}
}
else {
return '';
}
}
var dom = getHTMLOfSelection();
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.greeting === "getDom")
sendResponse({DOM:dom});
});
它会通过选择DOM来这里background.js
请问您可以添加一个示例,显示问题?即动态数据。 – Xan 2015-04-03 09:40:10
我刚更新了这个问题。我再也无法重现这个问题,我不知道如何可能,但现在问题已经消失了!!但问题可能会回来(我不知道如何!),还有另一个问题:上下文菜单应该被激发一次后,工作正常 – 2015-04-03 09:48:17
我认为问题是与时间,JS将被注入,它应该被注入在开始。你能帮助我吗? – 2015-04-03 09:49:18