我使用$.get
函数从我的chrome扩展程序中的exetrnal网站获取一些html:
$.get(url, function(data) {
var someImgs= $(data).find('img[width="90"]').parent();
});
但是我在控制台中看到了这样的错误:
http://pastexen.com/i/7kTfvqwoOq.png chrome-extension://nqzxdldmasxchnkgibeedilpknlbndiho/files/image.png
我在我的扩展程序中不使用任何图像,我知道这是exetrnal网站上图像的链接。
我尝试了什么:
$.get()
函数包装到try-catch
$.ajaxError()
/files/image.png
http://website/files/image.png
替换为完整路径: data.replace()
现在没有想法。我做错了什么?
UPD:当我未触及data
时,不会发生错误。在$.get
内,我简单地输入console.log(data)
时没有错误
UPD2:我还尝试下载错误消息中提到的所有图片,并将它们放在我的扩展程序中与外部网站相同的路径
UPD3:正如评论中提到的那样,来自远程网站的图片正在向相对路径提供。所以我尝试使用以下代码将'src'属性中的相对路径替换为full:
var data = data.replace('/sites/default/', 'http://website/sites/default/');
你猜 - 结果是一样的,同样的错误。
UPD4:似乎替换不成功。我检查了上面的更换,它没有改变:
console.log(data.indexOf('src="/sites/default/')); //returns integer
所以,实际上已经解决了,将远程图像下载到我的扩展程序中。小'讨厌'的方式,但唯一可行的。感谢所有帮助我找出问题根源的评论员。
答案 0 :(得分:1)
修改:第二次看,url
页面的html包含具有相对文件路径的图片(如/files/menu_banners/ktc_apple.png
),但是当您解释它时使用jQuery作为DOM对象来处理它,它无法加载它们,因为它们的url现在被解释为相对于扩展(交叉原点限制仍然适用,但这不是问题,因为你编辑了清单)
-
您正在尝试发出跨源请求,但jQuery在扩展中包含时不知道要使用的正确API,这就是它失败的原因。您可以阅读有关XHR in Google Chrome extensions的更多信息;您基本上需要允许跨域访问您的网站网址:
通过向permissions添加主机或主机匹配模式(或两者) manifest文件的一部分,扩展可以请求访问 远程服务器在其原产地之外:
//manifest.json { "name": "My extension", ... "permissions": [ "http://www.google.com/" ], ... }
因此,在您的清单中,您应该包含您的http://website
网址,或使用通配符http://*/
并允许访问任何域名(开发方便,生产中安全性很差)