2011-09-23 21 views
3

(Safari)ツールバーから直接Webコンテンツにアクセスできますか?私は今コンテキストメニューからアクセスすることができますが、どのように私はツールバーに同じ機能を得るか考えていません。Safari拡張機能、ツールバーからページ/コンテンツに直接アクセスする?

これは私が得たものである:

// injected 
document.addEventListener("contextmenu", handleMessage, false); 
function handleMessage(msgEvent) { 
    var sel = ''; 
    sel = window.parent.getSelection()+''; 
    safari.self.tab.setContextMenuEventUserInfo(msgEvent, sel); 
} 

// global 
safari.application .addEventListener("command", performCommand, false); 
function performCommand(event) { 
console.log('performCommand'); 
    if (event.command == "abc") { 
      var query = event.userInfo; 
      console.log(query); 
      alert(query); 
    } 
} 

しかし、どのようにしたらいいのツールバーから直接このコンテンツ?

答えて

6

OK、基本的には次のように動作します。グローバルのperformCommandで

  • は、このイベントはhandleGextTextにhandleGextText
  • に巻き込まれ
  • イベントを派遣、(ツールバーをクリックして)呼び出されますあなたはあなたがする必要があることを実行し、safari.self.tab.dispatchMessageを呼び出します。これはグローバルにイベントをディスパッチします
  • グローバルでhandleEventによってキャッチされるイベント

// Global Script 
safari.application.addEventListener("command", performCommand, false); 
safari.application.addEventListener("message", handleEvent, false); 

// send message 
function performCommand(event) { 
    console.log('command:' + event.command); 

    if (event.command == "abc") { 
     console.log("msg: my message"); 
     safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("msg", "do-something");   
    }  
} 

function handleEvent(event) { 
    var messageName = event.name; 
    console.log("evenname:" + event.name);  
    if (messageName === "did-something") { 

     var msg = event.message; 

     // do something 
    }  
} 


// Injected Script 
if (window.top === window) { // inject only once! 
    console.log("add event listners [injected.js]"); 
    safari.self.addEventListener("message", handleGextText, false); 
} 

function handleGextText(event) { 
    console.log("evenname:" + event.name); 
    console.log("evenmsg :" + event.message); 

    var messageName = event.name; 
    var messageData = event.message; 
    if (messageName === "msg") { 
     if (messageData === "do-something") {   
      console.log('msg received: ' + event.name); 
      var sel = ''; 

      // do what you need to do and dispatch message back to Global 
      console.log("send message to toolbar");    
      safari.self.tab.dispatchMessage("did-something", sel);   
     } 
    } 
} 
1

[OK]をよく見つけました。私はメッセージでそれを解決しました。

私は、「グローバル」で、挿入されたスクリプトによってキャッチされるメッセージを送信します。その関数は選択されたテキストを取得し(userinfoに入れます)、グローバルにメッセージを返します。

それはそれです。

+0

コードを投稿する可能性はありますか? –

関連する問題