gpt4 book ai didi

未调用 WebView 的 JavascriptInterface 方法

转载 作者:行者123 更新时间:2023-11-28 19:16:35 24 4
gpt4 key购买 nike

我有一个非常奇怪的问题,我的应用程序是一个电子阅读器。为了调用 Web View 的函数,我使用 JavaScript 类:

    public class MyJavaScriptInterface {
Context mContext;

/* Instantiate the interface and set the context */
MyJavaScriptInterface(Context c) {
mContext = c;
}

@JavascriptInterface
public void functionToCall(String input) {
System.out.println("this function was called: "+ input);
}
}

我有一个自定义的 Web View ,我可以在其中添加 JavaScript 类。

  public class newBTWebView extends WebView implements {
public newBTWebView(Context context) {
super(context);
init(context);

}
public void init(Context context) {
System.out.println("newBTWebview init");
this.context = context;
this.getSettings().setJavaScriptEnabled(true);
setInitialScale(100);
addJavascriptInterface(new MyJavaScriptInterface(this.context), "HTMLOUT");
}
}

在我的主要 Activity 中,我启动 Web View 并使用 JavaScript 调用该函数:

   public class BookReader extends Activity implements WebViewDelegate{
private static Context mContext;
private static newBTWebView testWV;

@Override
protected void onCreate(Bundle savedInstanceState) {
System.out.println("onCreate");
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
testWV = (newBTWebView) findViewById(R.id.mywebview1);
testWV.setDelegate(this);
testWV.setWebChromeClient(new WebChromeClient());
testWV.getSettings().setJavaScriptEnabled(true);
testWV.getSettings().setPluginState(PluginState.ON);


testWV.setWebViewClient(new WebViewClient() {

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
System.out.println("shouldOverrideUrlLoading: " + url);
}
@Override
public void onPageFinished(WebView view, String url) {
System.out.println("onPageFinished");
}
}
}
public void callMyFunction
{
System.out.println("callMyFunction");
testWV.loadUrl("javascript:window.HTMLOUT.functionToCall('myinput');”);
}
}

functionToCall 工作完美,最近在我的最新更新中,当我在设备上测试应用程序时,它仍然工作,但是当我在商店中提交它时,functionToCall 不再被调用。我在设备上测试了 apk 文件,functionToCall 没有被调用。仅当我直接从电脑到设备运行应用程序时,它才有效,但在同一设备上使用 apk 文件(如前面提到的 functionToCall 不会被调用)。

我已经在 Samsung S4、Samsung Note 10.1 和 Nexus note 上进行了测试。适用于 Android 4.4.2、4.0.4 和 5.0.1。

最佳答案

您是否启用了混淆器或某些代码混淆?如果是,您应该添加 keep 属性

-keep public class com.MyJavaScriptInterface 
-keep public class * implements com.MyJavaScriptInterface
-keepclassmembers class * implements com.MyJavaScriptInterface {
<fields>;
<methods>;
}

我不知道您的类(class)的完整限定名称。所以请输入您的完全限定名称。

关于未调用 WebView 的 JavascriptInterface 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29670156/

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