在上下文菜单中进行safari扩展。当图像鼠标右键单击时,我如何知道图像网址?

时间:2012-05-24 06:33:05

标签: safari safari-extension

通过谷歌进行safari扩展imageSearch。

这是我的来源。

injected.js

document.addEventListener("contextmenu", handleContextMenu, false);

function handleContextMenu(event) {
    safari.self.tab.setContextMenuEventUserInfo(event, event.target.nodeName);
}

global.html

<!DOCTYPE HTML>
<script type="text/javascript" src="jquery.js"></script>
<script>
safari.application.addEventListener("contextmenu", handleContextMenu, false);
function handleContextMenu(event) {
    var query = event.userInfo;
    if (query === "IMG") {
        event.contextMenu.appendContextMenuItem("imageSearch", "Search Google with this image");
    }
}

safari.application.addEventListener("command", performCommand, false);
function performCommand(event) {
    if (event.command === "imageSearch") {  


       /*How I get image Url??? */
       var imageUrl="";


    /*
        var url = "http://images.google.com/searchbyimage?image_url="+imageUrl;
        var tab = safari.application.activeBrowserWindow.openTab("foreground");
        tab.url = url;

    */

    }
}

我的目标是......

  1. 如果鼠标右键单击上下文菜单中的“使用Google搜索此图像”。 (全部清除)

  2. 点击“使用此图片搜索Google”谷歌。 (???)

  3. 所以我想知道图片网址。

    我该怎么办?

2 个答案:

答案 0 :(得分:4)

你可以试试这个:

  1. 将整个节点存储到事件的userInfo:

    function handleContextMenu(event) {
        safari.self.tab.setContextMenuEventUserInfo(event, event.target);
    }
    
  2. 将一些全局javascript变量添加到您的global.html(例如var lastClickedImg),

  3. 更改handleContextMenu函数,将函数handleContextMenu中的event.userInfo存储到此变量中:

    function handleContextMenu(event) {
        var query = event.userInfo;
        if (query.nodeName === "IMG") {
            lastClickedImg = query;
            event.contextMenu.appendContextMenuItem("imageSearch", "Search Google with this image");
        }
    }
    
  4. 在你的函数performCommand中,你可以轻松地从lastClickedImg获取图像的url:

    lastClickedImg.src
    

答案 1 :(得分:0)

您可以通过在注入的脚本中放置contextmenu的事件侦听器来查找图像URL。

function contextMenuHandler(event)
{
    var url = event.target.src;
    safari.self.tab.setContextMenuEventUserInfo(event, url);
}

document.body.addEventListener("contextmenu", contextMenuHandler, false);

然后在命令事件

中恢复图像src
var imageUrl = event.userInfo;

您还应该进行一些验证,以确保它是图像。