Google chrome extension cors+;s3和x2B;浏览器缓存&x2B;扩充功能
对。这是一个复杂的问题。我会尽量简明扼要 我的网站从s3获取资源。 我还有一个扩展名,当有人执行google查询时,需要预取s3文件,所以稍后当他们进入我的站点时,资源会被缓存。 在这一点上,我可能应该强调,我没有做任何恶意的事情。只是用户体验的问题。 我的问题是。在扩展上向s3发出ajax请求(无论是从内容脚本还是从后台)都不会发送原始标头。 这意味着资源在下载和缓存时没有allow origin标头。s3 不添加允许来源:*如果请求中没有来源。因此,稍后,在我的站点上,由于缓存文件中缺少allow origin标头,所以失败:-( 有没有更好的方法来预取浏览器缓存的想法 有没有一种方法可以强制ajax请求发送一个来源?任何来源? 因为我有一个allow origin:*在我的s3存储桶上,我认为任何origin都会接受null。 谢谢 编辑:最终使用了Rob W的一个解决方案。你太棒了。 让我谈谈他提出的每一个选择:Google chrome extension cors+;s3和x2B;浏览器缓存&x2B;扩充功能,google-chrome-extension,amazon-s3,cors,browser-cache,Google Chrome Extension,Amazon S3,Cors,Browser Cache,对。这是一个复杂的问题。我会尽量简明扼要 我的网站从s3获取资源。 我还有一个扩展名,当有人执行google查询时,需要预取s3文件,所以稍后当他们进入我的站点时,资源会被缓存。 在这一点上,我可能应该强调,我没有做任何恶意的事情。只是用户体验的问题。 我的问题是。在扩展上向s3发出ajax请求(无论是从内容脚本还是从后台)都不会发送原始标头。 这意味着资源在下载和缓存时没有allow origin标头。s3 不添加允许来源:*如果请求中没有来源。因此,稍后,在我的站点上,由于缓存文件中缺少al
谢谢。干得好您有三个选择:
Origin
请求头origin:null
函数prefetchWithOrigin(url){
var html='('+函数(url){
var x=新的XMLHttpRequest();
x、 打开('GET',url);
x、 onloadend=函数(){
parent.postMessage('done','*');
};
x、 send();
}+)(“+JSON.stringify(url)+”);”;
var f=document.createElement('iframe');
f、 src='data:text/html',+encodeURIComponent(html);
(document.body | | document.documentElement).appendChild(f);
window.addEventListener('message',函数侦听器(事件){
//完成后移除框架
if(event.source==f.contentWindow){
removeEventListener('message',listener);
f、 删除();
}
});
}
@如果在清单文件的
权限
部分中未指定主机权限,则不允许Ilanlewin跨源XHR,即使存在具有“匹配”模式的内容脚本。尝试一下,您将看到源代码:chrome扩展名://[origin]
当https://google.com/
是在没有源站权限的情况下访问的。此功能是设计的,因此可以依赖。Rob,我不知道你最后一条评论的确切意思,但我在清单文件中对一般权限和内容脚本都有一般权限…比如“权限”:[“http://*/*”、“https://*/*”、“内容脚本”:[{“匹配项”:[“http://*/*”、“https://*/*”]、@Ilanlewin,如果您试图使用AJAX访问的网站的URL(XMLHttpRequest)如果不匹配您的权限
数组中的任何一个,则Chrome将添加一个来源
标题。是否在内容脚本
中的匹配
中指定主机与此无关。从权限
中删除http://*/*
和https://*/*
,Chrome将包含一个来源
请求标头。