Javascript 用于PDF的Chrome扩展上下文菜单
我正在为chrome浏览器开发一个扩展,我想为pdf文档添加一个指定的上下文菜单。我还为类型“page”和“image”添加到指定的上下文菜单中。 如果我将类型设置为“all”,则有一个contextmenu,但没有为pdf文档指定 是否可以为pdf文档添加指定的contextmenu,还是应该在clickEventHandler中使用类型为“all”的it make开关大小写 更多信息,请访问: 以下是“文件”类型:Javascript 用于PDF的Chrome扩展上下文菜单,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在为chrome浏览器开发一个扩展,我想为pdf文档添加一个指定的上下文菜单。我还为类型“page”和“image”添加到指定的上下文菜单中。 如果我将类型设置为“all”,则有一个contextmenu,但没有为pdf文档指定 是否可以为pdf文档添加指定的contextmenu,还是应该在clickEventHandler中使用类型为“all”的it make开关大小写 更多信息,请访问: 以下是“文件”类型: 我猜您只想在选项卡中显示PDF时添加上下文菜单,对吗?我只是想问一下,因为
我猜您只想在选项卡中显示PDF时添加上下文菜单,对吗?我只是想问一下,因为一开始我认为您想在PDF文件的链接上添加上下文菜单,这确实是可能的*。(你可能知道) 我找不到直接执行此操作的方法,但是另一种方法是根据当前URL是否与PDF文件匹配来侦听和添加或删除上下文菜单。一个缺点是,这意味着需要
选项卡
权限,这可能会让用户感到害怕。(“此扩展可以访问您的选项卡和浏览活动”或类似内容)
*出于好奇,您可以这样做:
chrome.contextMenus.create({
title: "Hello world",
contexts: ["link"],
targetUrlPatterns: ["*://*/*.pdf"]
});
(您当然可以添加您感兴趣的其他选项)此函数适用于我的pdf文档:
chrome.tabs.onActivated.addListener(function (info) {
var tab = chrome.tabs.get(info.tabId, function (tab) {
if (tab.url.indexOf(".pdf") > 0) {
chrome.contextMenus.create({
"id": "1",
title: "Just for PDF Documents",
contexts: ["all"],
onclick: function (e) {
}
});
} else {
chrome.contextMenus.remove("1", null);
}
});
});
也许是电话线
if (tab.url.indexOf(".pdf") > 0) {
应该用表达式编辑 目前的答案并不完美:
let g_contextMenus = [{
id: "test",
title: "test"
}];
function createContextMenus() {
for (var menu of g_contextMenus) {
chrome.contextMenus.create({
id: menu["id"],
type: "normal",
title: menu["title"],
contexts: ["all"]
});
}
}
createContextMenus();
function updateContextMenu(tabId) {
chrome.tabs.get(tabId, function(tab) {
var suffix = tab.url.slice(-4);
var isPdf = suffix.toLowerCase() == ".pdf";
for (var menu of g_contextMenus) {
chrome.contextMenus.update(menu["id"], { visible: isPdf })
}
});
};
/**
* Switch tab
**/
chrome.tabs.onActivated.addListener(function(info) {
updateContextMenu(info.tabId);
});
/**
* New open file
**/
chrome.tabs.onUpdated.addListener(function(tabId, info, tab) {
var suffix = tab.url.slice(-4);
if (info.status == "complete" && suffix.toLowerCase() == ".pdf") {
updateContextMenu(tabId);
}
});
/**
* Multiple window/New window
**/
chrome.windows.onFocusChanged.addListener(function(winId) {
chrome.tabs.query({ lastFocusedWindow: true, active: true }, function(tabs) {
updateContextMenu(tabs[0].id);
});
});
谢谢,我修改了我的函数,现在指定的上下文菜单只适用于pdf文档:很好奇,考虑到进程外的pdf扩展的行为非常不同,这到今天仍然有效吗?我不明白为什么这不适用于
'documentUrlPatterns':[“*://*/*.pdf”]
let g_contextMenus = [{
id: "test",
title: "test"
}];
function createContextMenus() {
for (var menu of g_contextMenus) {
chrome.contextMenus.create({
id: menu["id"],
type: "normal",
title: menu["title"],
contexts: ["all"]
});
}
}
createContextMenus();
function updateContextMenu(tabId) {
chrome.tabs.get(tabId, function(tab) {
var suffix = tab.url.slice(-4);
var isPdf = suffix.toLowerCase() == ".pdf";
for (var menu of g_contextMenus) {
chrome.contextMenus.update(menu["id"], { visible: isPdf })
}
});
};
/**
* Switch tab
**/
chrome.tabs.onActivated.addListener(function(info) {
updateContextMenu(info.tabId);
});
/**
* New open file
**/
chrome.tabs.onUpdated.addListener(function(tabId, info, tab) {
var suffix = tab.url.slice(-4);
if (info.status == "complete" && suffix.toLowerCase() == ".pdf") {
updateContextMenu(tabId);
}
});
/**
* Multiple window/New window
**/
chrome.windows.onFocusChanged.addListener(function(winId) {
chrome.tabs.query({ lastFocusedWindow: true, active: true }, function(tabs) {
updateContextMenu(tabs[0].id);
});
});