用于chrome-extension协议的XMLHttpRequest

时间:2011-10-21 12:23:55

标签: javascript google-chrome google-chrome-extension xmlhttprequest

我正在使用背景页面,我需要在当前标签内容中注入一些代码。

所以我做了以下事情:

  • 定义browser_action
  • 定义此监听器chrome.browserAction.onClicked.addListener
  • 通过chrome.tabs.executeScript
  • 调用content_scripts加载的脚本

从页面内容我需要从扩展文件夹中加载html资源。

但使用此XMLHttpRequest会给我错误Cross origin requests are only supported for HTTP

由错误NETWORK_ERR: XMLHttpRequest Exception 101

的XMLHttpRequest处理

那我该怎么解决呢?

注意:地址类似于chrome-extension://someextensionid/file.html

2 个答案:

答案 0 :(得分:2)

解决使用:

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

,其中

  • btoa = string to base64
  • loadXHR = synchronous xmlhttprequest
  • chrome.extension.getURL =解析扩展程序文件夹中的地址

这是在background_page中完成的,并使用

传递给前台的脚本
chrome.tabs.executeScript

并且在前台,脚本将字符串转换为html-string和dom对象

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

,其中

  • document.createElement =创建新的“”元素
  • innerHTML = div元素的HTML值,因此设置它将创建DOM可解析内容
  • atob = base64字符串到解码版
  • document.appendChild =将带有HTML内容的div附加到body元素

答案 1 :(得分:1)

而不是:

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

你应该可以使用:

loadXHR('file.html')

因为XMLHttpRequest了解相对路径(root是你的扩展文件夹)。