Я пытаюсь создать расширение для Chrome, оно должно внедрить скрипт в веб-страницу, этот скрипт перехватывает ответы json и отправляет их в фоновый скрипт.
Имейте в виду, яЯ никогда не делал этого неправильно, поэтому в моем манифесте у меня есть:
"background": {
"scripts": ["background.js"],
"persistent": true
},
"content_scripts": [
{
"matches": ["*://url*"],
"run_at": "document_start",
"js": ["inject.js"]
}
],
"web_accessible_resources": ["injected.js"],
в фоновом скрипте, я обрабатываю сообщения следующим образом:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.type) {
switch(request.type) {
case "THIS_REQUEST_TYPE":
do_stuff(request.foo, request.bar);
break;
...................
inject.Цель js - внедрить injected.js в веб-страницу, и теперь он также выполняет ретрансляцию сообщений, которые переходят из injected.js в background.js, я внедряю injected.js таким образом:
var s = document.createElement('script');
s.src = chrome.extension.getURL('injected.js');
s.onload = function() {
this.remove();
};
(document.head || document.documentElement).appendChild(s);
Теперь,чтобы получать сообщения из injected.js в фоновый скрипт, я в основном использую:
window.postMessage(msgdata, "*");
Это отправляет сообщения из injected.js в inject.js, затем в inject.js я могу получить эти сообщения с:
window.addEventListener("message", function(event) {
Тогда я наконец смогу отправить эти сообщения в свой фоновый скрипт, на этот раз используя:
chrome.runtime.sendMessage(
Я не нашел никакого способа напрямую отправлять сообщения из injected.js в фоновый режим.js, информация доступнаДокументация по chrome прекрасно подходит для отправки сообщений из inject.js в background.js, но в противном случае они не работают, я попробовал несколько онлайн-решений, и единственное, которое я смог использовать, - это то, что мне удалось получить.
В любом случае, это работает, я могу отправлять ответы json из injected.js в inject.js в background.js и анализировать их в моем фоновом скрипте.
Дело в том, что я ненавижусделать это таким образом, ответы json могут быть очень длинными, я уже фильтрую ответы в injected.js, так что отправляются только те, кто полезен, но все же иногда мне приходится отправлять копию ответов длиной 591109 символов!Итак, необходимость посылать дважды такие длинные ответы - это ужасно, я хочу, чтобы это было эффективно и быстро.
У кого-нибудь есть идеи по этому поводу?