0

Я пытаюсь отправить HTML из локально внутри расширения chrome в div на активной вкладке. Я отправляю HTML через фоновый скрипт и получаю с помощью скрипта содержимого, введенного на активную вкладку.Передача сообщений с расширенными расширениями Chrome - как пройти HTML

Я получил порт для работы и тестирования с помощью различных простых текстовых сообщений. Div также появляется, но он пуст, так как HTML не отправляет правильно. Кто-нибудь знает, что не так с моим кодом?

фон сценарий:

chrome.runtime.onConnect.addListener(function(port) { 
    console.assert(port.name == "sidebar"); 
    port.onMessage.addListener(function(msg) { 
     if (msg.command == "read_sidebar") 
     { 
      //var sidebarURL = chrome.extension.getURL("sidebar.html"); 
      //console.log(sidebarURL); 
      var element = document.createElement('div'); 
      element.id = "test"; 
      $("test").load('sidebar.html'); 
      port.postMessage({command: "load_sidebar", html: element.innerHTML}) 
     } 
     else if (msg.command == "close_load") { 
      console.log("told to close load"); 
     } 
    }); 
}); 

содержание сценария:

function loadSidebar() { 

    var port = chrome.runtime.connect({name: "sidebar"}); 
    port.postMessage({command: "read_sidebar"}); 
    port.onMessage.addListener(function(msg) { 
     if (msg.command == "load_sidebar") 
     { 
      console.log(msg.html); 
      document.getElementById("mySidebar").innerHTML= msg.html; 
      port.postMessage({command: "close_load"}); 
     } 
    }); 
} 

ответ

1

Этот API можно отправлять только в формате JSON-сериализации объектов и HTMLElement не сериализации.

Что вы можете попытаться сделать, это добавить HTML в web_accessible_resources section манифеста:

"web_accessible_resources" : [ 
    "sidebar.html", 
    (any resources used by sidebar.html) 
    ], 

Тогда вы можете напрямую загрузить файл из сценария контента, используя

chrome.runtime.getURL('sidebar.html') 

как его URL.

Вы можете ввести его как iframe, или если это статический HTML, вы можете запросить его с XHR и обработать ответ.

+0

Хмммм, я вижу. Я пытаюсь не вводить его как iframe, так как боковая панель должна взаимодействовать с DOM страницы. Это не статический HTML (html имеет angularJS). Я не знаком с XHR. Какую документацию я могу прочитать, чтобы запросить с XHR и обработать ответ? – Sandra

+0

Ну, если вы не изолируете свою боковую панель со страницы, все виды Fun Stuff произойдут. Поэтому вы можете переосмыслить это. XHR означает [XmlHttpRequest] (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest). Он может получить необработанный HTML-код, но он не является непосредственно полезным, если он не является статичным. – Xan

+0

Хорошая точка. Я сделал его iframe и успешно отобразил локальный файл html. Однако угловой код разрушается. Я включил угловые и все другие соответствующие сценарии в заголовке, но я просто вижу простой HTML в iframe. Может ли инъецируемый iframe использовать angularJS? – Sandra

Смежные вопросы