[英]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.