gpt4 book ai didi

Javascript 接口(interface)回调在 android webview API >= 21 和 GWT 2.7 javascript 中不起作用

转载 作者:可可西里 更新时间:2023-11-01 11:43:08 31 4
gpt4 key购买 nike

我的代码遇到了一个特殊问题。 javascript 回调适用于 API 级别 19 或更低级别的设备,但不适用于 API 21 及更高级别。奇怪的是正常的 Html javascript 回调适用于所有 API 级别。我没有使用混淆器。这是我的代码:

主 Activity .java

WebAppInterface wai = new WebAppInterface(this, this);
myWebView.addJavascriptInterface(wai, "Android");
myWebView.loadUrl("http://192.168.2.246/abhishek/test/");

WebAppInterface.java

class WebAppInterface {
Context mContext;
MainActivity parent;

/** Instantiate the interface and set the context */
WebAppInterface(Context c, MainActivity parent) {
mContext = c;
this.parent = parent;
}

@JavascriptInterface
public void setHeading(String heading) {
Toast.makeText(mContext, "Setting heading to " + heading, Toast.LENGTH_SHORT).show();
}
}

GWT 代码:

JavaScript:

function setHeading(heading) {
console.log("setting heading...");
// Android callback
if(typeof Android !== 'undefined'){
Android.setHeading(heading);
}
if(typeof Android == 'undefined') {
console.log("undefined!!");
}
}

Java:

public static final native void setAppHeading(String heading) /*-{
$wnd.setHeading(heading);
}-*/;

我在 lollipop 及更高版本上将 typeof Android 设置为“未定义”。任何人都可以告诉我这有什么问题,或者给我一个适用于 Android API 级别 21 及更高级别的 GWT javascript 的示例代码。

最佳答案

也许是竞争条件?您可能想将它放在计时器中以确保它不是。

更新:

因为它确实是一个竞争条件,将计时器设置为 1ms 可能就足够了,使用以下可能是最佳实践:

Scheduler.scheduleDeferred

参见 http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsDelayed.html

关于Javascript 接口(interface)回调在 android webview API >= 21 和 GWT 2.7 javascript 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35357275/

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