Kai*_*zay 2 javascript safari safari-extension
我正在尝试编写一个safari扩展,让我在打开上下文菜单时获取元素的url(类似于在链接上打开上下文菜单时的方式,并选择"new link"窗口"或什么的.
一旦我在var中有了url,我就会用它来做其他事情.我怎么做?
我的全局html文件中有以下脚本.
<script>
safari.application.addEventListener("command",handleContextMenu,false);
function handleContextMenu(event)
{
if(event.command === "my command")
{
var link = event.target;
// try to get a link element in the parent chain
while(link != null && link.nodeType == Node.ELEMENT_NODE
&& link.nodeName.toLowerCase() != "a")
{
link = link.parentNode;
}
if(link)
{
// do stuff
//I open the window only to check that I am correctly getting the link
var nwin = safari.application.openBrowserWindow();
nwin.activeTab.url = link;
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
它打开了一个[object%20SafariExtensionContextMenuItem]位于地址栏中的窗口,而不是打开一个页面.
如何修复我的代码,以便将正确的URL放在地址栏中?
event.target是一个SafariExtensionContextMenuItem,而不是您期望的页面元素.要访问页面内容,您需要使用注入的脚本:
safari.application.addEventListener('command', handleCommand, false);
function handleCommand(event) {
if(event.command === 'geturl') {
var link = event.userInfo;
if (link) {
safari.application.openBrowserWindow().activeTab.url = link;
}
}
}
Run Code Online (Sandbox Code Playgroud)
document.addEventListener('contextmenu', handleContextMenu, false);
function handleContextMenu(event) {
var target = event.target;
while(target != null && target.nodeType == Node.ELEMENT_NODE && target.nodeName.toLowerCase() != "a") {
target = target.parentNode;
}
safari.self.tab.setContextMenuEventUserInfo(event, target.href);
}
Run Code Online (Sandbox Code Playgroud)