用于 chrome 扩展协议的 XMLHttpRequest

发布于 2024-12-10 22:37:11 字数 563 浏览 0 评论 0原文

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

所以我执行以下操作:

  • 定义 browser_action
  • 定义侦听器,如下所示 chrome.browserAction.onClicked.addListener
  • 调用由 content_scripts 通过 chrome.tabs.executeScript 加载的脚本

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

但使用此 XMLHttpRequest 会出现错误 Cross origin requests are onlysupported for HTTP

由 XMLHttpRequest 处理,错误 NETWORK_ERR: XMLHttpRequest Exception 101

那么我应该如何解决它呢?

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

I'm using background page and I need to inject some code into current tab contents.

so I do following:

  • define browser_action
  • define listener like this chrome.browserAction.onClicked.addListener
  • calling script loaded by content_scripts via chrome.tabs.executeScript

And from page content I need to load html resource from within extensions folder.

but using this XMLHttpRequest gives me error Cross origin requests are only supported for HTTP

handled by XMLHttpRequest by error NETWORK_ERR: XMLHttpRequest Exception 101

So how am I supposed to solve it?

Note: address is like chrome-extension://someextensionid/file.html

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

羁〃客ぐ 2024-12-17 22:37:11

使用以下方法解决:

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

其中

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

这是在background_page中完成的,并传递到前台的脚本

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 元素

Solved using:

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

where

  • btoa = string to base64
  • loadXHR = synchronous xmlhttprequest
  • chrome.extension.getURL = resolve address in extension folder

this was done in background_page and passed to script in foreground using

chrome.tabs.executeScript

and in foreground, script converted string to html-string and dom object

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

where

  • document.createElement = creates new "" element
  • innerHTML = HTML value of div element, so setting it will create DOM parseable content
  • atob = base64 string to decoded version
  • document.appendChild = appends div with HTML content to body element
断念 2024-12-17 22:37:11

而不是:

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

您应该能够只使用:

loadXHR('file.html')

因为 XMLHttpRequest 理解相对路径(根目录是您的扩展文件夹)。

Instead of:

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

you should be able to just use:

loadXHR('file.html')

as XMLHttpRequest understands relative path (with root being your extension folder).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文