我正在查看Android的Phonegap資源,並試圖驗證它們的notification.alert()
方法是否簡單地委託給原生JavaScript alert()
函數。他們的代碼做:Phonegap和提示()
Notification.prototype.alert = function(message, completeCallback, title, buttonLabel) {
var _title = (title || "Alert");
var _buttonLabel = (buttonLabel || "OK");
PhoneGap.exec(completeCallback, null, "Notification", "alert", [message,_title,_buttonLabel]);
};
這在我看來就像「警報」將被解釋爲函數的名稱exec()
調用,但exec()
是這樣做的:
PhoneGap.exec = function(success, fail, service, action, args) {
try {
var callbackId = service + PhoneGap.callbackId++;
if (success || fail) {
PhoneGap.callbacks[callbackId] = {success:success, fail:fail};
}
//using: ["Notification", "alert", callbackId, true]
var r = prompt(PhoneGap.stringify(args),
"gap:"+PhoneGap.stringify([service, action, callbackId, true]));
//...
} catch (e2) {
console.log("Error: "+e2);
}
};
現在PhoneGap.stringify()
簡單解析JSON.stringify()
,所以Phonegap代碼通過調用帶有兩個JSON對象/數組的prompt()
函數來執行API方法notification.alert()
。我的假設是,prompt()
是native JavaScript prompt() function(我沒有發現任何可以覆蓋此功能的JavaScript代碼)。如果是這種情況,那麼這個代碼是如何工作的?
他們做各種其他地方類似用途的prompt()
,以及:
PhoneGap.JSCallbackPort = prompt("getPort", "gap_callbackServer:");
是不是有什麼特別的地方,他們都呼籲prompt()
的方式(特別是通過包括形式gap.*:.*
的第二個參數)是啓用一些自定義行爲?或者讓它們以某種方式覆蓋了在其代碼外部的prompt()
函數的默認行爲?
請注意,這特別適用於Android版的Phonegap,因爲其他版本似乎使用稍微不同的機制來執行API調用。
提示符返回一個字符串。哪裏不對? – xdazz
問題是'prompt()'的標準版本向用戶顯示一個對話框。但是,這不是這裏發生的事情。這些'prompt()'調用的結果沒有顯示對話框,而是調用了Phonegap API的其他部分。實質上,他們使用'prompt()'作爲他們的主要API入口點,並且我想知道如何/爲什麼。 – aroth