2012-03-17 46 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。预先感谢帮助我这样做。

编辑:根据尖尖的建议编辑,但问题依然存在。

+0

你应该声明“要求”和“currentQuery”以'var',几乎可以肯定。 – Pointy 2012-03-17 14:24:12

+0

已修复,但问题仍然存在。 – Josef 2012-03-17 14:28:31

回答

1

chrome.tabs.sendRequest的第二个参数是JSON序列进行运输。

唯一的一个传递函数的方法是通过所述第三参数。这个功能是接收作为第三个参数在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内的第三个参数? – Josef 2012-03-17 14:43:01

+0

@Grant我在我的回答中提到过:它作为第三个参数传递给[事件侦听器](http://code.google.com/chrome/extensions/extension.html#event-onRequest):'chrome .extension.onRequest.addListener(function(request,sender,COMMAND_RECEIVED_HERE){/ * ... * /})'。 – 2012-03-17 14:48:37

+0

我已将整个扩展缩减为只有15行代码,这是我得到的:执行'chrome.extension.onRequest.addListener( 函数(request,sender,COMMAND_RECEIVED_HERE){alert(COMMAND_RECEIVED_HERE); });' 它提醒这样的:'功能(响应){ 如果(端口){ port.postMessage(响应); port = null; }其他{// 送我们时的响应,现在page'等 但我使用纯粹的你为我提供的代码(感谢代码,它看起来清晰) – Josef 2012-03-17 15:25:01