我正在尝试构建一个safari扩展(主要用于学习目的),当用户右键单击链接时,会创建一个美味的书签。我看过WWDC创建Safari扩展视频,一切正常。
除了我没有线索如何找出用户是否点击了链接(或只是一些文本),如果是,请获取它的网址和标题。到目前为止我得到的是:
document.addEventListener("contextmenu", handleContextMenu, false);
function handleContextMenu(event){
safari.self.tab.setContextMenuEventUserInfo(event,getSelection().toString());
}
但这显然只给了我一串选择。现在,根据Safari参考库getSelection()
返回DOMSelection
object。但即使在那里,我也无法找到能够处理所选链接的方法。
正如您可能会注意到的,我对这整个javascript和DOM内容都很陌生,所以请原谅这是一个显而易见的问题:)
侨, 斯文
答案 0 :(得分:3)
在简单的右键单击中,选择将在内设置锚链接。这意味着您将选择其文本节点,但链接节点本身不会。因此,尝试在选择中找到链接是没用的。
您可以使用DOMSelection
的{{1}}获取最后选择的文本节点并检查其祖先,直到找到focusNode
元素。这应该是关于你想要的。
<a>
答案 1 :(得分:0)
zneak的答案对我不起作用,所以我使用event.target
而不是选择:
var link = evt.target;
// get parent node in case of text nodes (old safari versions)
if(link.nodeType == Node.TEXT_NODE) {
link = link.parentNode;
}
// if for some reason, it's not an element node, abort
if(link.nodeType != Node.ELEMENT_NODE) {
return;
}
// try to get a link element in the parent chain
while(link != null &&
currentElement.nodeType == Node.ELEMENT_NODE &&
link.nodeName.toLowerCase() != "a") {
link = link.parentNode;
}
if(link) {
// do stuff
}