作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想查看当前选项卡是否是背景页面中的 PDF 文件。
我可以在最后检查 .pdf 的网址,但有些 PDF 文件没有该网址。
最佳答案
仅仅为了获取 MIME 类型而发出新请求有点繁重,而且不可靠。例如,如果当前显示的页面是 POST 表单提交的结果,那么发出 GET
请求通常不会导致相同的页面。
如果您正在开发经常需要访问此信息的扩展程序,请使用 chrome.webRequest
用于跟踪响应的 API。以下演示扩展显示了单击浏览器按钮后的内容类型:
// background.js
var tabToMimeType = {};
chrome.webRequest.onHeadersReceived.addListener(function(details) {
if (details.tabId !== -1) {
var header = getHeaderFromHeaders(details.responseHeaders, 'content-type');
// If the header is set, use its value. Otherwise, use undefined.
tabToMimeType[details.tabId] = header && header.value.split(';', 1)[0];
}
}, {
urls: ['*://*/*'],
types: ['main_frame']
}, ['responseHeaders']);
chrome.browserAction.onClicked.addListener(function(tab) {
alert('Tab with URL ' + tab.url + ' has MIME-type ' + tabToMimeType[tab.id]);
});
function getHeaderFromHeaders(headers, headerName) {
for (var i = 0; i < headers.length; ++i) {
var header = headers[i];
if (header.name.toLowerCase() === headerName) {
return header;
}
}
}
注释:
text/plain
时,Chrome 会回退到 MIME sniffing除非设置了X-Content-Type-Options: nosniff
。在第一种情况下,检测到的 MIME 类型可以是任何类型。在后一种情况下,默认 MIME 类型为 text/plain
。为了完整起见,这里有一个 manifest.json
文件,可用于测试前面的代码:
{
"name": "Click button to see MIME",
"version": "1",
"manifest_version": 2,
"background": {
"scripts": ["background.js"],
"persistent": true
},
"browser_action": {
"default_title": "Show MIME"
},
"permissions": [
"webRequest",
"activeTab",
"*://*/*"
]
}
关于google-chrome - 如何在 Google Chrome 扩展程序中检测当前选项卡的 MIME 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4921175/
我是一名优秀的程序员,十分优秀!