我正在查看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