2

我有这个 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)如果链接是“https://maps.google.com/”,则获取 id“leurl”,以及 2)如果它不是 Google Map 链接,然后从地址栏中获取链接。我得到了第二部分,但我不知道如何做第一部分。虽然我知道在制作谷歌浏览器扩展时该怎么做(document.getElementById('link');)。

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

请原谅我,因为我对制作 Safari 扩展不太熟悉。

4

1 回答 1

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);
    }
}

注入的.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是这样的一个很好的资源。

于 2012-12-12T19:59:30.450 回答