2

Safari拡張機能のインストールが完了した後、DOMにアクセスできますか? この拡張機能がインストールされているページの HTML にアクセスすることに興味があります。

4

1 に答える 1

4

これは、JSスクリプトを挿入することで実現できます。挿入されたスクリプトは、挿入されたWebページのDOMにアクセスできます。挿入されたスクリプトには、Webページのホストから実行されたスクリプトと同じアクセス権限があります。

詳細については、こちらをご覧ください。

挿入されたスクリプトから関数を呼び出す

  1. リストアイテム
  2. ExtensionBuilderを使用して拡張フォルダーを作成します。をコピーします
  3. リストをテキストエディタに保存し、Injected.jsおよびGlobal.htmlとして保存します。
  4. Injected.jsとGlobal.htmlを拡張フォルダーにドラッグします。クリック
  5. ExtensionBuilderのExtensionGlobalPageで、Global.htmlを選択します。
  6. [終了スクリプト]の[新しいスクリプト]をクリックして、[Injected.js]を選択します。をセットする
  7. すべてへの拡張Webサイトアクセスレベル。[インストール]をクリックします。

コードInjected.js

var initialVal=1;
var calculatedVal=0 ;

function doBigCalc(theData) {
    safari.self.tab.dispatchMessage("calcThis",theData);
}

function getAnswer(theMessageEvent) {
    if (theMessageEvent.name === "theAnswer") {
        calculatedVal=theMessageEvent.message;
        console.log(calculatedVal);
    }
}
safari.self.addEventListener("message", getAnswer, false);

doBigCalc(initialVal);

コードGlobal.html

<!DOCTYPE HTML>
<html>
<head>
<title>global HTML page</title>
<script type="text/javascript">

function bigCalc(startVal, event) {
    // imagine hundreds of lines of code here...
    var endVal = startVal + 2;
    // return to sender
    event.target.page.dispatchMessage("theAnswer", endVal);
}

function respondToMessage(theMessageEvent) {
    if(theMessageEvent.name === "calcThis") {
        var startVal=theMessageEvent.message;
        bigCalc(startVal, theMessageEvent);
    }
}

    safari.application.addEventListener("message",respondToMessage,false);
</script>
</head>
<body>
</body>
</html>
于 2013-01-09T16:00:07.413 に答える