Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript chrome扩展协议的XMLHttpRequest_Javascript_Google Chrome_Google Chrome Extension_Xmlhttprequest - Fatal编程技术网

Javascript chrome扩展协议的XMLHttpRequest

Javascript chrome扩展协议的XMLHttpRequest,javascript,google-chrome,google-chrome-extension,xmlhttprequest,Javascript,Google Chrome,Google Chrome Extension,Xmlhttprequest,我正在使用背景页面,我需要在当前选项卡内容中插入一些代码 因此,我做了以下几点: 定义浏览器操作 像这样定义侦听器chrome.browserAction.onClicked.addListener 通过chrome.tabs.executeScript 从页面内容中,我需要从extensions文件夹中加载html资源 但是使用这个XMLHttpRequest会给我带来错误跨源请求只支持HTTP 由XMLHttpRequest按错误处理网络错误:XMLHttpRequest异常101 那我

我正在使用背景页面,我需要在当前选项卡内容中插入一些代码

因此,我做了以下几点:

  • 定义浏览器操作
  • 像这样定义侦听器
    chrome.browserAction.onClicked.addListener
  • 通过
    chrome.tabs.executeScript
从页面内容中,我需要从extensions文件夹中加载html资源

但是使用这个XMLHttpRequest会给我带来错误
跨源请求只支持HTTP

由XMLHttpRequest按错误处理网络错误:XMLHttpRequest异常101

那我该怎么解决呢

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

使用以下方法解决:

btoa(loadXHR(chrome.extension.getURL('file.html')))
在哪里

  • btoa=从字符串到base64
  • loadXHR=同步xmlhttprequest
  • chrome.extension.getURL=解析扩展文件夹中的地址
这是在后台页面中完成的,并使用

chrome.tabs.executeScript
在前台,脚本将字符串转换为html字符串和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元素
    • 而不是:

      btoa(loadXHR(chrome.extension.getURL('file.html')))
      
      您应该能够只使用:

      loadXHR('file.html')
      

      由于
      XMLHttpRequest
      了解相对路径(root是您的扩展文件夹)。

      也许您可以向后台页面发送请求,后台页面将执行实际的数据获取。然后后台页面将此数据发送到内容脚本。我如何通过
      executeScript
      发送DOMDocument类型的变量?我认为“加载html资源”是指html源,它只是一个字符串。如果您在HTML中引用外部文件,则可能会变得很棘手。是的,我正在尝试加载HTML文件,并通过AppendChild将其添加到document.body。将源(字符串)发送到内容脚本,然后您可以在那里用jQuery等工具对其进行解析,并将某些元素附加到正文中。是的,您是对的。但在我的例子中,并不是我需要获取的每个文件都和后台文件放在同一个文件夹中page@Marek没关系,
      /
      是您的扩展文件夹,如果您愿意,可以使用
      /dir1/dir2/file.html
      chrome.extension.getURL
      仅对内容脚本有用,在后台页面中,您可以在任何地方使用相对路径。在内容脚本中,您不能使用chrome.extension.getURL,不是吗?@Marek您可以,而这几乎是唯一需要它的地方。