Я встречаюсь с проблемой при создании расширения Chrome.chrome.runtime.sendMessage Uncaught Error: неверные аргументы для подключения
Я создаю , который предназначен для встраивания скриптом контента на любую веб-страницу в момент, когда пользователь нажимает на мою кнопку расширения.
В этом есть поле выбора, которое при изменении должно отправить сообщение обратно на расширение.
Расширение должно затем получать данные из электронной таблицы Google, а затем отправлять обратно информацию на .
Мой manifest.json следующий (редактор Примечание: фильтруются в соответствующих областях):
{
// manifest.json
"background" : {
"scripts" : ["background.js"]
},
"browser_action": {
"default_icon": "icon-small.png"
},
"content_scripts": [ {
"js": ["jquery-1.11.1.min.js","selectionjfm.js","jquery-ui.min.js","nlp_compromise.js"],
"css":["jquery-ui.css"],
"matches": [ "http://*/*", "https://*/*"],
"all_frames":true,
"run_at": "document_end",
"info.status":"complete", "status": "complete"
}],
// ...
"permissions": [
"identity", "https://accounts.google.com/*", "https://www.googleapis.com/*","https://spreadsheets.google.com/*","tabs","storage","<all_urls>"
],
"web_accessible_resources": [
"jquery-ui.min.js","popup.html","popup.js","inject.js","jquery-1.11.1.min.js","loader.gif"
],
"oauth2": {
"client_id": "xxxxxxxxx.apps.googleusercontent.com",
"scopes": ["https://www.googleapis.com/auth/plus.login","https://spreadsheets.google.com/feeds"]
}
}
Это расширение включает в себя selectionjfm.js скрипт в качестве контента, который Вставляет таким образом:
// selectionjfm.js - content script as included in manifest.json
var iframe = document.createElement('iframe');
iframe.setAttribute("id", "my_id");
iframe.src = chrome.runtime.getURL('popup.html');
document.body.appendChild(iframe);
Но и впрыскивает JavaScript файл inject.js следующим образом:
// selectionjfm.js - content script as included in manifest.json
var s = document.createElement('script');
s.src = chrome.runtime.getURL('inject.js');
(document.head || document.documentElement).appendChild(s);
console.log("[Content script 1] added inject.js to the content page");
var s = document.createElement('script');
s.src = chrome.runtime.getURL('jquery-1.11.1.min.js');
(document.head || document.documentElement).appendChild(s);
Содержит поле выбора. Когда пользователь выбирает другое значение в этом поле, мне нужно запустить запрос в Google Spreadsheet с помощью API Google Spreadsheet. Вот почему я хочу отправить сообщение обратно на расширение, поскольку я понимаю, что только оттуда я могу использовать эти API.
inject.js ждет сообщения, посылаемые при onchange
событий на поле выбора «s срабатывает.
// inject.js waitning for message from the iframe
window.addEventListener("message",
function (e) {...
Сообщение отправлено по :
//poupup.js (iframe source)
var sel = document.getElementById("databaseselect");
sel.addEventListener("change", function (e) {
sendMessTobg("changedatabase",sel.selectedOptions[0].text);
});
Затем попробуйте отправить сообщение на background.js:
// inject.js
if (e.data.message == "changedatabase") { // recieving message from the iframe : this works fine
if (e.data.data != null) {
console.log("[Content script] trying to send databasechange to extension");
chrome.runtime.sendMessage({
databasechange:true,
content:e.data.data
}, function (reply) {
if (chrome.runtime.lastError) {
console.log("[Content script] failure to send databasechange to extension");
} else {
console.log("[Content script] databasechange with backgroud is a success!");
}
});
}
}
это является то, что chrome.runtime.sendMessage
дает ошибка:
Uncaught Error: Invalid arguments to connect.
Я видел в другом сообщении что-то о отправке идентификатора расширения, но в документации говорилось, что это не является обязательным, так как если не указано, идентификатор будет моим собственным расширением.
Итак, чтобы уточнить, последний бит кода находится в 'inject.js'? Было бы лучше, если бы вы включили в каждый блок кода комментарий, например '// inject.js', потому что вы часто говорите об одном фрагменте кода, который делает что-то другому. – Xan
И расширение на _ "ждет сообщения, отправленного'