【问题标题】:Lock Access to WebView Android锁定对 WebView Android 的访问
【发布时间】:2014-08-14 11:50:26
【问题描述】:

WebView loadUrl 运行异步任务来加载给定的 URL。有一个按钮,它具有调用 loadURL 方法的 onClick 方法。 WebView 使用 JavascriptInterface - 特定方法由 onload 事件 ( ) 调用。我想在 loadURL 之前锁定对对象的访问并在 JavascriptInterface 方法中解锁。将 loadUrl 放在同步块中就够了吗?

编辑:

加载 WebView

        mRenderReceiptWebView = (WebView) findViewById(R.id.receiptWebView);
        mRenderReceiptWebView.getSettings().setJavaScriptEnabled(true);
        mRenderReceiptWebView.getSettings().setPluginState(PluginState.OFF);
        mRenderReceiptWebView.getSettings().setAllowFileAccess(false);

        mRenderReceiptWebView.setVisibility(View.VISIBLE);
        mRenderReceiptWebView.setWebChromeClient(new WebChromeClient(){

            @Override
            public boolean onConsoleMessage(ConsoleMessage cm) 
            {
                Log.d("ShowMote", cm.message() + " -- From line "
                                     + cm.lineNumber() + " of "
                                     + cm.sourceId() );
                return true;
            }
        });
        mRenderReceiptWebView.setDrawingCacheEnabled(true);
               mRenderReceiptWebView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
  mRenderReceiptWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
  mRenderReceiptWevView.addJavascriptInterface(new JavaScriptInterface(),
  "Android"); receiptWebView.loadUrl(url);

JavaScript接口函数

公共 JavaScriptInterface(){

@Javascript接口

public void funJS() {}

}

html 正文加载

<body onload="(function(){ Android.funJS();}());">

【问题讨论】:

  • 请出示您所说的代码。

标签: javascript android webview


【解决方案1】:

您可以使用 setWebViewClientProgressDialog 来实现此目的。代码说明:

web.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap bitmap) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, bitmap);
            //start progress dialog here and setCancellable(false) to dialog
        }
        @Override
        public void onPageFinished(WebView view, String url) {
            //dismiss dialog here progressdialog.dismiss()
        }
    });

或者,您可以在 onclick 方法中启动 progressdialog,并在 onPageFinished 方法中将其关闭。

【讨论】:

  • 但 onPageFinished 并不能确保加载网页的全部内容。这就是我使用 onload 事件的原因
  • @dzakens 然后您可以将从 getrequest 收到的 html 字符串下载到 url 并使用 asynctask 将该字符串设置为 webview。上面的方法虽然是最简单的
  • 但是 loadUrl 调用涉及创建异步任务?
  • @dzakens 正如我之前所说,下载 html 并点击此链接,此处链接中没有异步调用,即使它会在几毫秒内完成 stackoverflow.com/questions/8987509/…
猜你喜欢
  • 2012-10-25
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多