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
跨源请求只支持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您可以,而这几乎是唯一需要它的地方。