我正在开发Chrome浏览器的扩展程序,我想为pdf文档添加指定的上下文菜单。我还为“page”和“image”类型添加了指定的contextmenus。 如果我将类型设置为“全部”,那么有一个上下文菜单,但没有为pdf文档指定。
是否可以为pdf文档添加指定的上下文菜单,或者我应该在clickEventHandler中使用“all”类型和切换案例?!
详情请见: http://developer.chrome.com/extensions/contextMenus.html
这些是“文件”类型:
contexts ( optional array of enum of "all", "page", "frame", "selection", "link", "editable", "image", "video", "audio", or "launcher" )
答案 0 :(得分:3)
我猜你只想在标签中显示PDF时才想添加上下文菜单,对吗?只是问,因为我一开始认为你想在PDF文件的链接上添加上下文菜单,这确实是可能的*。 (你可能知道)
我找不到直接执行此操作的方法,但另一种方法是听取chrome.tabs.onActivated
并根据当前网址是否与PDF文件匹配来添加或删除上下文菜单。一个缺点是它意味着要求tabs
权限,这对用户来说可能看起来很可怕。 (“此扩展程序可以访问您的标签页和浏览活动”或类似内容)
*对于好奇的人,你这样做:
chrome.contextMenus.create({
title: "Hello world",
contexts: ["link"],
targetUrlPatterns: ["*://*/*.pdf"]
});
(你会添加你感兴趣的其他选项)
答案 1 :(得分:2)
此功能适用于我的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) {
应该用表达式编辑!
答案 2 :(得分:0)
目前的答案并不完美:
移除上下文菜单的方法
不适用于新打开的 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);
});
});
参考文献: