在Safari中抓取Google地图链接或网络链接

时间:2012-12-08 23:27:26

标签: javascript google-maps safari safari-extension

我有这个javascript代码:

function handleCommand (event) {
    if (event.command === 'send') {
        sendingLink(event.target.browserWindow.activeTab.url);
    } else if (event.command === 'sendMenu') {
        sendingLink(safari.application.activeBrowserWindow.activeTab.url);
    }
};

我希望能够制作一个" if"声明我在哪里:1)抓住id" leurl"如果该链接是" https://maps.google.com/,并且2)如果它不是Google Map链接,则从地址栏中获取该链接。我得到了第二部分,但我不知道如何做第一部分。我知道如何在制作Google Chrome扩展程序时(document.getElementById('link');)。

我怎样才能做到这一点?任何帮助表示赞赏。先感谢您。

请原谅我,因为我不太熟悉Safari扩展程序。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望将当前页面中包含的一些信息添加到您的全局页面中。不幸的是,使用document.getElementById('link');无法直接使用,因为全局页面无法访问网页内容(出于安全考虑,我认为)。

您必须使用注入的脚本和消息传递将信息发送到全局页面。例如,您可以执行以下操作:

global.js

const app = safari.application;
app.addEventListener('message', handleMessage, false);

function sendingLink(link) {
    app.activeBrowserWindow.activeTab.page.dispatchMessage('getLink');
}

function handleMessage(msg) {
    if (msg.name === 'returnLink') {
        alert(msg.message);
    }
}

injected.js

safari.self.addEventListener('message', handleMessage, false);

function handleMessage(msg) {
    if (msg.name === 'getLink') {
        // Trigger share button. Maybe:
        // document.getElementById('link').click();
        var link = document.getElementById('leurl').value;
        safari.self.tab.dispatchMessage('returnLink', link);
    }
}

然后确保在Safari Extension Builder中将它们分别设置为全局页面和注入的脚本。

对于像这样的事情,Apple Safari Extensions Development Guide是一个很好的资源。