XMLHttpRequest для протокола расширения Chrome - PullRequest
1 голос
/ 21 октября 2011

Я использую фоновую страницу, и мне нужно добавить код в текущее содержимое вкладки.

, поэтому я делаю следующее:

  • определить browser_action
  • определить слушателя следующим образом chrome.browserAction.onClicked.addListener
  • вызывающий скрипт, загруженный content_scripts через chrome.tabs.executeScript

А из содержимого страницы мне нужно загрузить html-ресурс из папки расширений.

но использование этого XMLHttpRequest выдает ошибку Cross origin requests are only supported for HTTP

обработано XMLHttpRequest по ошибке NETWORK_ERR: XMLHttpRequest Exception 101

Так, как я должен решить это?

Примечание: адрес похож на chrome-extension://someextensionid/file.html

Ответы [ 2 ]

2 голосов
/ 21 октября 2011

Решено с использованием:

btoa(loadXHR(chrome.extension.getURL('file.html')))

, где

  • btoa = строка в base64
  • loadXHR = синхронный xmlhttprequest
  • chrome.extension.getURL = разрешить адрес в папке расширений

это было сделано в background_page и передано в сценарий на переднем плане, используя

chrome.tabs.executeScript

, а на переднем плане сценарий преобразовал строку в html-строку и domobject

var div = document.createElement('div');
div.innerHTML = atob(tbr);
document.body.appendChild(div);

, где

  • document.createElement = создает новый элемент ""
  • innerHTML = HTML-значение элемента div, поэтому при его установке будет выполняться анализ DOMcontent
  • atob = base64 строка для декодированной версии
  • document.appendChild = добавляет div с HTML-содержимым к элементу body
1 голос
/ 21 октября 2011

Вместо:

btoa(loadXHR(chrome.extension.getURL('file.html')))

Вы можете просто использовать:

loadXHR('file.html')

, поскольку XMLHttpRequest понимает относительный путь (корень является вашей папкой расширения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...