【问题标题】:How to tell if a tab is website or just an image?如何判断标签是网站还是图像?
【发布时间】:2017-02-08 17:08:16
【问题描述】:

我想制作一个 chrome 扩展来检查标签是图像还是网站。让我详细说明一下:我只想在选项卡是图像时注入(或执行)一些代码,例如,如果选项卡 URL 是:

https://upload.wikimedia.org/wikipedia/commons/0/0e/MorningIndianRiver%2C_KennedySpaceCenter.jpg

因此,如果我创建一个后台脚本来检查 URL 是否是图像(例如*.jpg),那么它将执行所有看起来像图像但不是图像的代码,例如:

https://commons.wikimedia.org/wiki/File:MorningIndianRiver,_KennedySpaceCenter.jpg

它看起来像一个图像的 URL,但它不是。而且问题是有时标签页实际上是一个图像,即使没有扩展扩展名,像这样:

http://placehold.it/500x500

这是一张图片,但后台脚本不知道。

那么如何判断标签是图片还是网站呢? API 中有什么东西可以处理这个吗?

【问题讨论】:

  • 使用/注入一个内容脚本来检查唯一的 body 元素是否是一个图像,它的 src 等于标签 URL。
  • @wOxxOm 可能比我的解决方案更好,但我知道跨不同版本的 chrome 的可靠性如何
  • @Hatchet 同意!这个周末才改的!所以这不是理所当然的事情!
  • 不确定浏览器版本会如何影响这一点。多年来我一直在使用Center Image userscript,它利用了上述方法,看起来很可靠。

标签: javascript google-chrome-extension


【解决方案1】:

向相关资源发出HEAD 请求并读取Content-Type 响应标头。不过,您可能必须提出跨源请求,但如果您正在开发 Chrome 扩展程序,looks like there's a permission for that

您可能会寻找匹配 image/* 的 MIME 类型。

【讨论】:

  • 但是请求会是异步的。我将如何适应!
  • @ibrahimmahrir 这就是 xhr 的美妙之处,它是异步的。看看文档:developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest,添加一个 readystatechange 处理程序,或者同步打开,有很多不同的使用方式。
  • 我知道 XHR 的美​​妙之处在于它们的异步特性。但在这种情况下,如果选项卡是图像,我想重定向到本地页面(函数应该立即返回,而不是等待 XHR 完成)。我可以通过创建另一个执行 XHR 的本地页面并查看它是否是图像然后重定向到我的本地页面或原始网站来做到这一点,但是如果它是网站,它将整天循环(网站 >背景脚本>执行XHR的本地页面>网站>背景...)..
  • @ibrahimmahrir 你可以强制请求与 open() 方法的第三个参数同步:developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/open
  • 我相信这已被弃用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-11
  • 2014-08-29
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 2013-08-08
相关资源
最近更新 更多