gpt4 book ai didi

google-chrome - 如何在 Google Chrome 扩展程序中检测当前选项卡的 MIME 类型?

转载 作者:行者123 更新时间:2023-12-02 18:12:09 25 4
gpt4 key购买 nike

我想查看当前选项卡是否是背景页面中的 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;
}
}
}

注释:

  • 此扩展仅显示加载扩展后加载的选项卡的结果。
  • 这只适用于 http/https 页面。不支持 ftp:、file:、filesystem:、blob:、data:。
  • 当服务器未指定 MIME 类型或 MIME 类型为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com