我正在将我的一个Firefox扩展名移植到Chrome,而且我遇到一个
AJAX查询问题.以下代码在FF扩展名中正常工作,但Chrome中的状态为“0”失败.
function IsImage(url) { var isImage = false; var reImageContentType = /image\/(jpeg|pjpeg|gif|png|bmp)/i; var reLooksLikeImage = /\.(jpg|jpeg|gif|png|bmp)/i; if(!reLooksLikeImage.test(url)) { return false; } var xhr = $.ajax({ async: false,type: "HEAD",url: url,timeout: 1000,complete : function(xhr,status) { switch(status) { case "success": isImage = reImageContentType.test(xhr.getResponseHeader("Content-Type")); break; } },}); return isImage; }
扩展程序的这个特定部分会检查剪贴板中的内容(另一个Chrome问题我已经解决了),如果是图像URL,它会发送一个HEAD请求,并检查“Content-Type”响应头以确保它是一个图像.如果是这样,它将返回true,将剪贴板文本粘贴到img标签中.否则,如果它看起来像一个不是图像的普通URL,它将其包装在A标签中.如果它不是一个URL,它只是一个简单的粘贴.
无论如何,被检查的URL绝对是一个图像,并且在FF中正常工作,但是在完整的功能中,xhr.status为“0”,当功能完成时状态为“错误”.将超时时间延长至10秒没有帮助.我已经验证测试图像应该运行时返回为“image / jpeg”:
curl -i -X HEAD <imageURL>
我也知道我应该使用成功和错误的回调而不是完整的,但是它们也不起作用.有任何想法吗?
解决方法
正如您在“内容脚本”中所述,您无法做任何跨域XHR.您必须在扩展页面(如背景,弹出式窗口,甚至选项)中执行此操作.
有关内容脚本限制的更多信息,请参阅:
http://code.google.com/chrome/extensions/content_scripts.html
有关xhr限制的更多信息,请参阅:
http://code.google.com/chrome/extensions/xhr.html