4

通过 google 制作 safari 扩展 imageSearch。

这是我的来源。

注入的.js

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

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

全局.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 搜索”google it。(???)

所以我想知道图片网址。

我该怎么办?

4

2 回答 2

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
    
于 2012-09-03T21:19:14.630 回答
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;

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

于 2012-09-17T10:38:49.740 回答