gpt4 book ai didi

javascript - Phonegap 和 prompt()

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:52 27 4
gpt4 key购买 nike

我正在浏览 Phonegap Android 的源代码,并尝试验证他们的 notification.alert() 方法只是委托(delegate)给原生 JavaScript alert() 函数。他们的代码:

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]);
};

在我看来,“alert”将被解释为要在 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 代码正在执行 notification.alert() 通过使用两个 JSON 对象/数组调用 prompt() 函数的 API 方法。我的假设是 prompt()native JavaScript prompt() function (我在他们的 JavaScript 代码中没有发现任何可以覆盖此函数的内容)。如果是这样,那么这段代码是如何工作的?

他们也在其他地方类似地使用 prompt():

PhoneGap.JSCallbackPort = prompt("getPort", "gap_callbackServer:"); 

他们调用 prompt() 的方式(特别是通过包含 gap.*:.* 形式的第二个参数)有什么特别之处吗?一些自定义行为?或者他们是否以某种方式覆盖了 JavaScript 代码外部某处 prompt() 函数的默认行为?

请注意,这特别适用于 Phonegap 的 Android 版本,因为其他版本似乎使用略有不同的机制来执行 API 调用。

最佳答案

prompt() 函数已被覆盖。

您可以在 DroidGap.java 中找到它。

@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
......
}

关于javascript - Phonegap 和 prompt(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7251557/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com