Я пытаюсь изменить содержимое страницы на основе вывода вызова xhr. Я отправляю сообщение из content.js, создавая вызов xrh в фоновом js-файле, а затем передавая результат в content.js, который изменяет содержимое страницы.Расширение Chrome: проблема с SendMessage
Из моего content.js
файла Я делаю следующее.
var s = document.createElement('script');
s.src = chrome.extension.getURL('src/content/main.js');
(document.head || document.documentElement).appendChild(s);
В моей main.js
я делаю
chrome.runtime.sendMessage({
method: 'GET',
action: 'xhttp',
url: myurl
}, function(responseText) {
console.log("Response Text is ", responseText);
});
И в моей bg.js
У меня есть следующие
chrome.runtime.onMessage.addListener(function(request, sender, callback) {
if (request.action == "xhttp") {
var xhttp = new XMLHttpRequest();
var method = request.method ? request.method.toUpperCase() : 'GET';
xhttp.onload = function() {
callback(xhttp.responseText);
};
xhttp.onerror = function() {
// Do whatever you want on error. Don't forget to invoke the
// callback to clean up the communication port.
callback('Error');
};
xhttp.open(method, request.url, true);
if (method == 'POST') {
xhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
xhttp.send(request.data);
return true; // prevents the callback from being called too early on return
}
});
Проблема я столкнулся, я получаю ошибку Invalid arguments to connect.
для chrome.runtime.sendMessage
функции ,
Я не уверен, что мне не хватает. Любая помощь нам очень ценится.
Как вы вводите код 'content.js'? Я не вижу каких-либо непосредственных ошибок с вашим кодом, и я никогда не видел такой ошибки - звучит, как использование 'connect' вместо' sendMessage'. – Xan
@Xan Я использовал следующее в content.js и имел оставшуюся логику в main.js, поскольку я хотел, чтобы jQuery загружался перед выполнением скрипта. Похоже, это вызывало проблему. Теперь я переместил его в content.js, он отлично работает. 'var s = document.createElement ('script'); s.src = chrome.extension.getURL ('src/content/main.js'); (document.head || document.documentElement) .appendChild (s); ' Но, однако, я не могу использовать jQuery сейчас. Любая идея для этого? –
Ага, поэтому моя теория верна. – Xan