jQuery.get()返回错误

时间:2014-01-13 00:37:00

标签: javascript jquery google-chrome-extension

我使用$.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网站上图像的链接。

我尝试了什么:

  1. $.get()函数包装到try-catch
  2. 使用$.ajaxError()
  3. 处理错误
  4. 使用/files/image.png
  5. 将相关链接 http://website/files/image.png 替换为完整路径: data.replace()
  6. 在jsFiddle中运行示例代码:错误是相同的,但尽管代码继续运行。
  7. 现在没有想法。我做错了什么?

    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
    

    所以,实际上已经解决了,将远程图像下载到我的扩展程序中。小'​​讨厌'的方式,但唯一可行的。感谢所有帮助我找出问题根源的评论员。

1 个答案:

答案 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://*/并允许访问任何域名(开发方便,生产中安全性很差)