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 マップのリンクでない場合は、次に、アドレスバーからリンクを取得します. 2番目の部分を取得しましたが、最初の部分を行う方法がわかりません. Google Chrome拡張機能を作成するときに行う方法は知っていますdocument.getElementById('link');.

どうすればこれを達成できますか?どんな助けでも大歓迎です。前もって感謝します。

Safari 拡張機能の作成にあまり詳しくないので、ご容赦ください。

4

1 に答える 1

0

私の理解が正しければ、現在のページに含まれている情報をグローバル ページに取得したいと考えています。残念ながらdocument.getElementById('link');、グローバル ページは Web ページのコンテンツにアクセスできないため (セキュリティ上の理由からだと思います)、直接使用することはできません。

挿入されたスクリプトとメッセージングを使用して、グローバル ページに情報を送信する必要があります。たとえば、次のようにします。

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 に答える