相关疑难解决方法(0)

如何为javascript界面​​配置proguard?

我实现了一个使用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)

有人知道可能出现什么问题吗?提前致谢

obfuscation android proguard

23
推荐指数
2
解决办法
1万
查看次数

"未捕获的TypeError:window.HTMLOUT.showHTML不是函数"

我正在尝试注入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)

javascript java android android-webview

5
推荐指数
1
解决办法
2294
查看次数