2012-03-17 3 views
0

ChromeはsendRequestを通過しようとしている関数を削除します。sendRequestは渡し関数を削除します

function sendQuery() { 
    var currentQuery = document.getElementById("queries").value; 

    var request = { 
    option: "random value", 
    command: function() { 
     alert("fire!"); 
    } 
    };  

    chrome.tabs.getSelected(null, function(tab) { 
    chrome.tabs.sendRequest(tab.id, request) 
    }); 
} 

あなたが見ることができるように、requestは機能commandが含まれていますが、私はcontentscriptによって受信されたリクエストを「ダンプ」がオンのとき、私が得るすべてはこれです:

request 
    Object 
    option: "random value" 
    __proto__: Object 

私はcommandを渡す必要があります同様に、optionだけでなく、私がそうするのを手伝ってくれてありがとう。

編集:Pointyの提案に従って編集しましたが、問題は残ります。

+0

あなたはほぼ確実に、var' 'と「要求」と「currentQuery」を宣言する必要があります。 – Pointy

+0

修正済みですが、問題は残ります。 – Josef

答えて

1

chrome.tabs.sendRequestの2番目のパラメータは、輸送用にシリアル化されたJSONです。

関数を渡す唯一の方法は、3番目のパラメータを使用することです。この関数は、chrome.extension.onRequestイベントリスナーで三番目のパラメータとして受け取られます:

function sendQuery() { 
    var currentQuery = document.getElementById("queries").value; 

    var request = { option: "random value" }; 
    var command = function() { alert("fire!"); };  

    chrome.tabs.getSelected(null, function(tab) { 
     chrome.tabs.sendRequest(tab.id, request, commans); 
    }); 
} 
+0

それはなぜそれが削除されるのかを説明しますが、私はどのようにcontentscriptの中に3番目のパラメータを集めますか? – Josef

+0

@Grant私は私の答えでそれを言及しました:それは[イベントリスナー](http://code.google.com/chrome/extensions/extension.html#event-onRequest)の第3引数として渡されます: 'chrome .extension.onRequest.addListener(function(リクエスト、送信者、COMMAND_RECEIVED_HERE){/ * ... * /}) '。 –

+0

私は、コードのわずか15行に全体の拡張を低減してきたし、これは私が得るものです: 'chrome.extension.onRequest.addListener( 機能(要求、送信者、COMMAND_RECEIVED_HERE){ 警告(COMMAND_RECEIVED_HERE)の実行後、 }); ' これはこれを警告します:' function(response){ if(port){ port.postMessage(response); port = null; } else { //レスポンスを送信するときにポートを否定し、今はページなど しかし、私はあなたが私に提供したコードを使用しています(コードのおかげで、それは明らかです) – Josef

関連する問題