我实现了一个使用JavascriptInterface的Webview.它没有混淆时工作正常,但Proguard立即活跃,它不起作用.我在这里看了其他答案,但我还是无法让它发挥作用.
一些WebView类:
public class Activity_Webview {
private WebView webView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JavaScriptInterface (), "HTMLOUT");
webView.setWebViewClient(mWebViewClient);
}
public class JavaScriptInterface implements NonObfuscateable{
@JavascriptInterface
public void processHTML(String html) {
handleFinishFromWebView(html);
}
}
Run Code Online (Sandbox Code Playgroud)
我在Proguard尝试过的:
-keep public class * implements com.project.NonObfuscateable
-keepclassmembers class * implements NonObfuscateable {
public void processHTML(java.lang.String);
}
Run Code Online (Sandbox Code Playgroud)
我也试过这个(当没有实现NonObfuscateable接口时:
-keep public class com.project.Activity_Webview.JavaScriptInterface
-keep public class * implements com.project.Activity_Webview.JavaScriptInterface
-keepclassmembers class * implements com.project.Activity_Webview.JavaScriptInterface {
<fields>;
<methods>;
}
Run Code Online (Sandbox Code Playgroud)
有人知道可能出现什么问题吗?提前致谢
我正在尝试注入JavaScript以便在加载时读取特定值webView.
这些是我用于我的属性webView.
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setCacheMode(2);
webView.getSettings().setDomStorageEnabled(true);
webView.clearHistory();
webView.clearCache(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setUseWideViewPort(false);
webView.getSettings().setLoadWithOverviewMode(false);
webView.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
Run Code Online (Sandbox Code Playgroud)
我正在我的onPageFInished()方法中注入javacript .
@Override
public void onPageFinished(final WebView view, final String url) {
webView.post(new Runnable() {
@Override
public void run() {
webView.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+document.getElementsByTagName('input')[0].value+'</head>');");
}
});
super.onPageFinished(view, url);
}
Run Code Online (Sandbox Code Playgroud)
下面的代码是MyJavaScriptInterface.
public class MyJavaScriptInterface{
@JavascriptInterface
public void showHTML(String html_data) {
if(html_data.contains("response_code")){
Log.e(TAG, " ======> HTML Data : "+ html_data);
new MakeQueryPayment().execute();
}
}
}
Run Code Online (Sandbox Code Playgroud)
从Logcat捕获的错误.
01-08 17:56:43.701 I/chromium(27026): [INFO:CONSOLE(1)] "Uncaught TypeError: window.HTMLOUT.showHTML …Run Code Online (Sandbox Code Playgroud)