簡體   English   中英

如何使用NPAPI從頁面上的javascript接收呼叫?

[英]How do I use NPAPI to receive calls from javascript on the page?

我正在開發一個需要接收來自javascript的調用的插件。 具體來說,它需要能夠為javascript提供回調函數,並且javascript需要能夠稍后使用至少一個字符串參數調用該函數。 javascript看起來像這樣(理想情況下):

var callback = null;
var setCallback = function(cb) {
  var callback = cb;
};
var input = document.getElementById('my_text_input_field');
input.onkeypress = function(ev) {
  // Did the user press enter?
  if (ev && ev.which == 13) {
    callback(input.value);
    return false;
  }
};

到目前為止,我想象我的C代碼看起來像這樣:

void SetCallback(void (*callback)(const char*)) {
  NPVariant npCallback;
  OBJECT_TO_NPVARIANT(callback, npCallback);
  NPVariant args[] = { npCallback };
  size_t nargs = 1;
  NPVariant result;
  // gFuncs is an NPNetscapeFuncs pointer
  NPIdentifier method = gFuncs->getstringidentifier("setCallback");
  // gJavaScriptAPI is an NPObject pointer
  gFuncs->invoke(gInstance, gJavaScriptAPI, method, args, nargs, &result);
}

這是一個合理的開始嗎? 如果是這樣,我在回調函數中需要做什么來處理它的調用? 如果沒有,做這樣的事情的正確方法是什么,或者在NPAPI中是不可能的?

先感謝您。

基本上你需要做的是提供一個實現InvokeDefault的NPObject; 您將其傳遞回頁面以響應某些Invoke或GetProperty調用,然后javascript可以隨時使用您想要的任何參數將其作為函數調用。

有關NPObjects的更多信息,請參閱http://npapi.com/tutorial3

FireBreath提取所有這些,以便為您完成90%的繁重工作; 如果你沒有看過它我強烈推薦它。

我可能完全錯了,但在Internet Explorer中,您使用window.external 但是當然MSIE與基於Netscape的NPAPI不​​同,所以我不能確定。 無論如何,如果您必須在MSIE中執行此操作,您可能會發現此技巧很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM