2012-10-15 43 views
0

在我的NPAPI插件中,我希望確定一個NPObject是否是一個函數(即它是Function的一個實例)。任何建議如何我可以做到這一點?NPAPI如何判斷NPObject是否是函數?

我可以NPN_HasMethod()檢查,看看是否有一個叫「呼喚」的方法,但我認爲更好的辦法是,如果我能「的instanceof功能foo」的執行JavaScript的相當於

我有試圖用我的'foo'NPObject作爲範圍和一個「this instanceof Function」的腳本來調用NPN_Evaluate,但不幸的是'this'是全局作用域,而不是我的'foo'對象。我誤解了範圍參數的意圖嗎?我找到的任何示例都使用該窗口。能夠使用實際的對象(或者至少'this'或對javascript對象的引用)會更可取(用於許多其他目的),但是要確定它是否是函數,任何好方法都是值得讚賞的。

回答

1

我知道的唯一方法是使用NPN_Evaluation將函數注入全局JavaScript範圍,然後使用NPObject調用它。

例如,注入以下功能:

window.isFunction = window.isFunction || function(obj) { 
    return typeof obj === 'function'; 
}; 

然後你就可以在其上使用NPAPI得到NPObject爲窗口,拿到「isFunction」屬性,然後做一個NPN_InvokeDefault與功能你想要檢查爲參數。

+1

這爲我解決了一整套問題:) – Innovine