當前位置:編程學習大全網 - 源碼下載 - android webView怎麽得到當前地址

android webView怎麽得到當前地址

獲取原始URL:webView.getOriginalUrl();

獲取當前URL:webView.getUrl();

如果訪問:

original是:

訪問成功後的地址可能根據地區或設備的不同而不壹樣,這個新地址可通過getUrl()獲取!

webview 獲取 網頁的title

[java] view plain copy

WebView mWebView = (WebView) findViewById(R.id.mwebview);

mWebView.setWebViewClient(new WebViewClient() {

@Override

public void onPageFinished(WebView view, String url) {

ExperimentingActivity.this.setTitle(view.getTitle());

}

});

getTitle

public String getTitle()

Get the title for the current page. This is the title of the current page until WebViewClient.onReceivedTitle is called.

返回:

The title for the current page.

下面這篇文章總結的比較全 ,但是 onReceivedTitle()方法在goback()之後無效。

如有轉載,請聲明出處: 時之沙: b())

mWebView.getSettings().setDisplayZoomControls(false);

註意:setDisplayZoomControls是在Android 3.0中新增的API.

這些是目前我整理出來的壹些註意事項和問題解決方案,也歡迎大家多提壹些關於webview的問題,如果有合適的解決方案,我會直接更新到這篇文章.

8月份更新:

11.WebView 在Android4.4的手機上onPageFinished()回調會多調用壹次(具體原因待追查)

需要盡量避免在onPageFinished()中做業務操作,否則會導致重復調用,還有可能會引起邏輯上的錯誤.

12.需要通過獲取Web頁中的title用來設置自己界面中的title及相關問題:

需要給WebView設置 WebChromeClient,並在onReceiveTitle()回調中獲取

[java] view plaincopy

WebChromeClient webChromeClient = new WebChromeClient() {

@Override

public void onReceivedTitle(WebView view, String title) {

super.onReceivedTitle(view, title);

txtTitle.setText(title);

}

};

但是發現在小米3的手機上,當通過webview.goBack()回退的時候,並沒有觸發onReceiveTitle(),這樣會導致標題仍然是之前子頁面的標題,沒有切換回來. 這裏可以用我上邊說的那個方法 。

這裏可以分兩種情況去處理:

(1) 可以確定webview中子頁面只有二級頁面,沒有更深的層次,這裏只需要判斷當前頁面是否為初始的主頁面,可以goBack的話,只要將標題設置回來即可.

(2)webview中可能有多級頁面或者以後可能增加多級頁面,這種情況處理起來要復雜壹些:

因為正常順序加載的情況onReceiveTitle是壹定會觸發的,所以就需要自己來維護webview loading的壹個url棧及url與title的映射關系

那麽就需要壹個ArrayList來保持加載過的url,壹個HashMap保存url及對應的title.

正常順序加載時,將url和對應的title保存起來,webview回退時,移除當前url並取出將要回退到的web 頁的url,找到對應的title進行設置即可.

這裏還要說壹點,當加載出錯的時候,比如無網絡,這時onReceiveTitle中獲取的標題為 找不到該網頁,因此建議當觸發onReceiveError時,不要使用獲取到的title.

13.WebView因addJavaScriptInterface()引起的安全問題.

這個問題主要是因為會有惡意的js代碼註入,尤其是在已經獲取root權限的手機上,壹些惡意程序可能會利用該漏洞安裝或者卸載應用.

關於詳細的情況可以參考下面這篇文章:

./pedant/safe-java-js-webview-bridge, 該項目利用onJsPrompt() 替代了addJavaScriptInterface(),(解決方案類似上述參考的博客)同時增加了異步回調,

很好地解決了webview js註入的安全問題.

10月份更新:

14.WebView頁面中播放了音頻,退出Activity後音頻仍然在播放

需要在Activity的onDestory()中調用

[java] view plaincopy

webView.destroy();

但是直接調用可能會引起如下錯誤:

[java] view plaincopy

10-10 15:01:11.402: E/ViewRootImpl(7502): sendUserActionEvent() mView == null

10-10 15:01:26.818: E/webview(7502): java.lang.Throwable: Error: WebView.destroy() called while still attached!

10-10 15:01:26.818: E/webview(7502): at android.webkit.WebViewClassic.destroy(WebViewClassic.java:4142)

10-10 15:01:26.818: E/webview(7502): at android.webkit.WebView.destroy(WebView.java:707)

10-10 15:01:26.818: E/webview(7502): at com.didi.taxi.ui.webview.OperatingWebViewActivity.onDestroy(OperatingWebViewActivity.java:236)

10-10 15:01:26.818: E/webview(7502): at android.app.Activity.performDestroy(Activity.java:5543)

10-10 15:01:26.818: E/webview(7502): at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1134)

10-10 15:01:26.818: E/webview(7502): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3619)

10-10 15:01:26.818: E/webview(7502): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3654)

10-10 15:01:26.818: E/webview(7502): at android.app.ActivityThread.access$1300(ActivityThread.java:159)

10-10 15:01:26.818: E/webview(7502): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1369)

10-10 15:01:26.818: E/webview(7502): at android.os.Handler.dispatchMessage(Handler.java:99)

10-10 15:01:26.818: E/webview(7502): at android.os.Looper.loop(Looper.java:137)

10-10 15:01:26.818: E/webview(7502): at android.app.ActivityThread.main(ActivityThread.java:5419)

10-10 15:01:26.818: E/webview(7502): at java.lang.reflect.Method.invokeNative(Native Method)

10-10 15:01:26.818: E/webview(7502): at java.lang.reflect.Method.invoke(Method.java:525)

10-10 15:01:26.818: E/webview(7502): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)

10-10 15:01:26.818: E/webview(7502): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

10-10 15:01:26.818: E/webview(7502): at dalvik.system.NativeStart.main(Native Method)

如上所示,webview調用destory時,webview仍綁定在Activity上.這是由於自定義webview構建時傳入了該Activity的context對象,因此需要先從父容器中移除webview,然後再銷毀webview:

[java] view plaincopy

rootLayout.removeView(webView);

webView.destroy();

15. WebView長按自定義菜單,實現復制分享相關功能

這個功能首先可以從兩方面完成:

(1) 在js中完成:

處理android.selection.longTouch

這裏推薦壹個開源項目進行參考,:

/btate/BTAndroidWebViewSelection

(2) 安卓層處理:

首先使用OnTouchListener實現長按實現監聽,然後實現WebView的Context menu,最後調用webview中的emulateShiftHeld(),為了適配安卓不同版本,最好使用反射方式調用.

  • 上一篇:昭通公司註冊:資質代辦遊戲資質怎麽辦理
  • 下一篇:什麽是電視機的智能語音功能
  • copyright 2024編程學習大全網