ЭКРАН ПЕЧАТИ, чтобы понять мою проблему: ссылка
Я создаю расширение, которое вставляет кнопку в DOM конкретной веб-страницы.Эта вставка достигается с помощью функции injectScript () из файла insert.js, которая правильно выполняется и правильно вводится в поле "content_scripts" : файла манифеста.
injectScript () внедряет (в DOM текущей загруженной веб-страницы, если это, конечно, искомая страница) тег сценария, содержащий тот же inject.js (который содержит событие onclick для кнопки), тег стиля, содержащий CSS для кнопки, и, что наиболее важно, div, который содержит текст, полученный из background.html путем вызова chrome.extension.sendRequest ({reeting: "dami"}, function (response) {...}); текст, вставленный в этот div, используется для заполнения какого-либо другого div с веб-страницы, нажав на кнопку, которую я вставил.
Это прекрасно работает, но мне также нужно решить еще одну проблему:
Конкретный текст, который я вставляю в DOM веб-страницы, вводится только , когда chrome.tabsСобытия .onSelectionChanged , chrome.tabs.onUpdated и chrome.history.onVisited .Я также хочу повторно вводить этот текст всякий раз, когда мой popup.html изменяет его, изменяя localStorage ["builtin"] .Итак, я хочу вот что: когда я нажимаю кнопку OK на странице popup.html, я хочу использовать chrome.extension.sendRequest ({приветствие: "reintrodu"}, функция (ответ) {...}); из popup.html для отправки запроса к тому же скрипту содержимого, который управлял моим первым вводом текста, но, похоже, он не работает.
Ничего не происходит, когда я нажимаю кнопку! test окна предупреждений ничего не показывают.Когда я нажимаю кнопку OK, popup.html просто закрывается, и обмен данными, по-видимому, не происходит.
Эта функция вызывается кнопкой OK из моего popup.html:
function closer()
{
if ($('input[name=check]').is(':checked'))
{
localStorage["builtin"] = document.getElementById("tkey_1").value;
localStorage["build"] = "true";
}
else
{
localStorage["builtin"] = document.getElementById("tkey_1").value;
localStorage["build"] = "false";
}
chrome.extension.sendRequest({greeting: "reintrodu"}, function(response)
{
alert(response.farewell);
});
window.close();
}
chrome.extension.sendRequest ({приветствие: "reintrodu"}, функция (ответ) {...}) должен отправить запрос к скрипту содержимого, который является inject.js :
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
// console.log(sender.tab ? "from a content script:" + sender.tab.url : "from the extension");
if (request.greeting === "history")
{
console.log("registered in history");
sendResponse({farewell: "goodbye from history"});
PageShowHandler();
}
else if (request.greeting === "historyrem")
{
console.log("registered in historyrem");
sendResponse({farewell: "goodbye from historyrem"});
PageShowHandler();
}
else if (request.greeting === "exploit")
{
console.log("registered in exploit");
sendResponse({farewell: "goodbye from exploit"});
PageShowHandler();
}
else if (request.greeting === "reintrodu")
{
console.log("registered in reintrodu");
sendResponse({farewell: "goodbye from reintrodu"});
//PageShowHandler();
alert('prins reintrodu');
}
else if (request.greeting === "selected")
{
console.log("registered in selected");
sendResponse({farewell: "goodbye from selected"});
PageShowHandler();
}
else
sendResponse({}); // snub them.
});
И это background.html , который, кажется, подходит для первоначальной инъекции, в отличие от popup.html:
<html>
<head>
<script type="text/javascript">
//Fired when a URL is visited, providing the HistoryItem data for that URL.
chrome.tabs.onSelectionChanged.addListener(function(tabId, selectInfo)
{
chrome.tabs.sendRequest(tabId, {greeting: "selected"}, function(response) {
console.log(response.farewell);
});
});
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab)
{
chrome.tabs.sendRequest(tab.id, {greeting: "exploit"}, function(response) {
console.log(response.farewell);
});
});
chrome.history.onVisited.addListener(function(result)
{
//alert(result.url);
//chrome.tabs.sendRequest(null, {greeting: "history"}, function(response) {
// console.log(response.farewell);
//});
chrome.windows.getCurrent(function(w)
{
chrome.tabs.getSelected(w.id, function (tabul)
{
//alert(tabul.id);
chrome.tabs.sendRequest(tabul.id, {greeting: "history"}, function(response) {
console.log(response.farewell);
});
});
});
});
chrome.history.onVisitRemoved.addListener(function(removed)
{
//alert(result.url);
//chrome.tabs.sendRequest(null, {greeting: "historyrem function(response) {
// console.log(response.farewell);
//});
chrome.windows.getCurrent(function(w)
{
chrome.tabs.getSelected(w.id, function (tabul)
{
//alert(tabul.id);
chrome.tabs.sendRequest(tabul.id, {greeting: "historyrem"}, function(response) {
console.log(response.farewell);
});
});
});
});
chrome.extension.onRequest.addListener(function(request, sender, sendResponse)
{
if(request.greeting == "dami")
{
if(localStorage["build"] == "true")
{
sendResponse({farewell: localStorage["builtin"]});
}
else
{
sendResponse({farewell: "textul default"});
}
}
else
{
sendResponse({farewell: "n-am ba; du-te dracu!"});
}
});
</script>
</head>
<body></body>
</html>
Thisэто манифест:
{
"name" : "gMail Adder ",
"version" : "1.0",
"description" : "Google Chrome Gmail Adder",
"options_page": "options.html",
"background_page": "background.html",
"run_at": "document_start",
"permissions": [
"tabs",
"history",
"http://*/*",
"https://*/*"
],
"content_scripts": [
{
"matches": ["*://*.google.mail.com/*", "https://*.google.mail.com/*" ,"http://mail.google.com/*" ,"https://mail.google.com/*", "https://www.google.com/*", "http://www.google.com/*", "file:///*"],
"css": ["toggle.css"],
"js": ["jquery-1.4.4.min.js", "inject.js"]
}
],
"browser_action" : {
"default_icon" : "Quest Icon 11.png",
"default_popup": "popup.html"
}
}