繁体   English   中英

Webview无法在onPageFinished上加载JavaScript

[英]Webview cannot load javascript at onPageFinished

我希望我的Webview在页面加载后插入某种javascript。 但是,我添加的javascript从未执行过:(我该怎么办?

mWebView = findViewById(R.id.webview);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished (WebView view, String url) {
            super.onPageFinished(view, url);
            Log.d("WebClient", "onPageFinished");
            view.loadUrl("javascript:(function(){"+
                    "aTagElements=document.getElementsByTagName('a');" +
                    "randromElement=aTagElements[Math.floor(Math.random() * aTagElements.length)];"+
                    "clickEvent=document.createEvent('HTMLEvents');"+
                    "clickEvent.initEvent('click',true,true);"+
                    "randromElement.dispatchEvent(clickEvent);" +
                    "alert('event dispatched.');"+ //<---not called
                    "})()");
        }
});

即使我注释掉了除alert行以外的所有脚本,仍然没有任何反应。

您将不得不在应用程序端像这样使用

mWebView .addJavascriptInterface(new WebAppInterface(this), "Android");

并必须在php端实现方法,实际上该方法将被触发

public class WebAppInterface {
    Context mContext;

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

    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}

在PHP Side工具上这样

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

<script type="text/javascript">
    function showAndroidToast(toast) {
        Android.showToast(toast);
    }
</script>

要获得完整的参考,您可以浏览此链接

每当您单击webView上的按钮时,您就会收到一条消息

尝试使用evaluvateJavascriptloadUrl仅在旧版本中有效。

webview.evaluateJavascript("(function() { "javascript:(function(){"+
                "aTagElements=document.getElementsByTagName('a');" +
                "randromElement=aTagElements[Math.floor(Math.random() * aTagElements.length)];"+
                "clickEvent=document.createEvent('HTMLEvents');"+
                "clickEvent.initEvent('click',true,true);"+
                "randromElement.dispatchEvent(clickEvent);" +
                "alert('event dispatched.');";

EvaluvateJavascript

您正在混合视图。 所以改变

super.onPageFinished(view, url);

super.onPageFinished(mWebView, url);

请尝试以下解决方案,它可能适合您。

WebSettings webSettings = webView.getSettings();
webSettings.setDefaultTextEncodingName("utf-8");
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setLoadWithOverviewMode(true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM