當前位置:首頁 » 安卓系統 » webviewandroid頁面跳轉

webviewandroid頁面跳轉

發布時間: 2022-12-11 13:19:51

A. Android中可不可以點擊WebView中的鏈接跳轉到另一個Activity並傳值

可以。
WebView.addjavascriptInterface(new AndroidJavaScript(this), "Android");
在AndroidJavaScript類里定義的方法都可以通過在連接中寫windows.Android.xxx來完成。
xxx就是AndroidJavaScript類里定義的方法(可以帶參數的)

B. 解決Android中WebView跳轉到瀏覽器的問題【轉】

轉自: https://blog.csdn.net/qianlima210210/article/details/52649624

C. webview中點擊鏈接怎麼跳轉到瀏覽器

您好,如何將點擊鏈接後的網頁也顯示呢,於是邊Google邊查看Android文檔,找到找到了一個方法,以下使用源碼解釋。

package demo.androidyue.webview;

import android.app.Activity;

import android.os.Bundle;

import android.webkit.WebView;

import android.webkit.WebViewClient;

public class WebViewDemoActivity extends Activity {

private WebView webView;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//初始化WebView

this.initWebView();

}

/*

* 初始化WebView

*/

private void initWebView(){

//從布局文件中擴展webView

this.webView=(WebView)this.findViewById(R.id.webview);

//為WebView設置WebViewClient處理某些操作

this.webView.setWebViewClient(new webViewClient());

//載入地址

this.webView.loadUrl("http://10.0.2.2");

}

class webViewClient extends WebViewClient{

//重寫shouldOverrideUrlLoading方法,使點擊鏈接後不使用其他的瀏覽器打開。

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

view.loadUrl(url);

//如果不需要其他對點擊鏈接事件的處理返回true,否則返回false

return true;

}

}

D. android webview載入某個網頁,之後通過這個網頁調到了另一個頁面,怎麼獲取這個頁面的網址和源碼

mWebView.setWebViewClient(new WebViewClient(){
// 這個方法在用戶試圖點開頁面上的某個鏈接時被調用
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url!=null) {
// 如果想繼續載入目標頁面則調用下面的語句
// view.loadUrl(url);
// 如果不想那url就是目標網址,如果想獲取目標網頁的內容那你可以用HTTP的API把網頁扒下來。
}
// 返回true表示停留在本WebView(不跳轉到系統的瀏覽器)
return true;
}
});

E. Android系統 WebView是什麼有什麼用

現在越來越多的APP都內置了Web網頁去載入視圖,也就是我們常說的Hybrid APP混合應用,市場上很多平台都是這樣做的,比如我們經常使用的淘寶、京東等電商平台。這些是如何實現的呢?在我們Android中有一個WebView組件,它就可以實現此類功能。它是Android中的原生UI控制項,主要用於在APP應用中方便地訪問遠程網頁或本地HTML資源,同時WebView也在Android中充當Java代碼和JS代碼之間交互的橋梁,實際上也可以將WebView看做一個功能最小化的瀏覽器。下面我們一起來看看WebView的一些常用的使用方法。

WebView是Android系統提供的一個能顯示網頁的系統控制項,它是一個特殊的View,同時也是一個ViewGroup,可以有很多其他子View。在Android 4.4以下(不包含4.4)系統WebView底層實現是採用WebKit內核,而在Android 4.4及其以上Google採用了Chromium內核作為系統WebView的底層內核支持。在這一變化中Android提供的WebView相關API並沒有發生較大變化,在4.4上也兼容低版本的API並且引進了少部分API。這里簡單介紹下基於Chromium的WebView和基於WebKit的WebView之間的差異,基於Chromium的Webview提供了更廣的HTML5、CSS3、JavaScript支持,在Android系統版本5.0上基於Chromium 37,WebView提供了絕大多數的HTML5特性支持,除此之外Chromium也支持遠程調試(Chrome DevTools)。WebKit JavaScript引起採用WebCore JavaScript在Android 4.4上換成了V8能直接提升JavaScript性能。

二、作用
1、顯示和渲染Web頁面
2、使用html文件(網路上或本地assets中)作為布局
3、可與JavaScript交互調用
註: WebView控制項功能強大,除了具有一般View的屬性和設置外,還可以對Url請求、頁面載入、渲染、頁面交互進行強大的處理。

F. Android activity中載入了webview,頁面跳轉後總是要點擊兩次手機的返回按鈕才能回到上一頁

WebViewClient中的shouldOverrideUrlLoading方法如下重寫:

@Override
(WebViewview,Stringurl)
{
view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
view.loadUrl(url);
returnsuper.shouldOverrideUrlLoading(view,url);
}

onKeyDown如下重寫:

@Override
publicbooleanonKeyDown(intkeyCode,KeyEventevent)
{
if(keyCode==KeyEvent.KEYCODE_BACK){
if(webView.canGoBack()){
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView.goBack();
returntrue;
}else{
finish();
returntrue;
}
}
returnfalse;
}

G. 關於Android WebView的那些事

[TOC]

Webkit是一個開源瀏覽器項目,其中,對Android開發者來說,或多或少的都有些接觸。 在應用層來看,最經常使用無非這么幾個類:WebView(Android中最為復雜,也是最為簡單的一個View,繼承自AbsoluteLayout),WebViewClient、WebChromeClient(作為回調控制類)、WebSettings(進行設置項的配置)等;Webkit內部包含了網路請求、頁面渲染、Js引擎等等。在Android4.4之前的版本中,系統使用的是Webkit內核,其後,切換到Google的Chromium內核。本文主要介紹的是在Android中,如何使用Webkit進行H5頁面的展現,以及常見問題的分析手段。

下面的內容抄自網路 & 亂七八糟的地方,簡單了解一下。

<b><i>前面都是吹牛逼的信息,如何使用Webkit來更好的搬磚? 且聽如下分解</i></b>

XML布局中丟一個 <WebView> 標簽,然後再 Activity 或者 Fragment 中 findViewById ,進而 loadUrl ,一般也沒人這么簡單的用,除非寫Demo。很簡單,它就是一個Layout,提供了一個調用載入頁面的介面,不寫範例了,能看到這篇文章的都看過Google的API說明。

主要涉及到WebView和WebSettings兩個類。

例如:

其實就是WebView的父類ViewGroup和View的方法,不多說了。不過需要注意的是,不是所有的View或ViewGroup的方法對WebView都生效。

列舉幾類常用的,幾乎所有App的 WebView 都會設置的屬性:

</br>

如何處理頁面跳轉以及特殊 Scheme

這個回調可以說是最容易出問題的一個回調,表示什麼? 字面意思,讓你重寫這個URL 的loading,比如點擊html打電話的一個 <a href=「tel:110」> 標簽,作為一個有節操、有責任心的瀏覽器,你需要處理 H5常用的幾個Scheme :

除此之外,還有各個應用自定義的scheme ,舉個例子,支付寶的支付Scheme : alipay: 。 這里的返回值,就代表你有沒有能力處理這個url,沒有的話Webkit就默認處理了。
需要注意的是,這個回調的觸發的絕大多數情況是點擊頁面的 <a href="xxxx"> a標簽,在Android中 loadUrl("http://www..com") ,是不會回調的,為什麼不會回調,各位自行理解吧。

超鏈接 <a> 標簽怎麼寫: 點我
特別說下窗口常見的兩種打開方式:

針對單頁模式的WebView框架(所有的html窗口均使用同一個WebView實例),不需要關注target的。
如果作為一個成熟的瀏覽器框架的話,是需要支持Html、JavaScript使用新窗口打開頁面,需要實現如下回調:

還有一個相關設置項: WebSettings.
此時,系統將不會再回調 shouldOverrideUrlLoading 。新窗口邏輯的具體實現機制,可以參考系統browser實現邏輯。

<b> 這里有個坑 </b>
Android 4.4版本 ,如果實現了onCreateWindow,也就是說頁面 <a> 標簽是這么寫的: <a href="http://www..com" target="_blank"> ,點擊此鏈接打開的新WebView窗口,此窗口中的url點擊,是不會觸發 shouldOverrideUrlLoading 。 這是剛替換成Chrominum內核出的一個bug。本人並沒在新版本上驗證是否已經修復。

另外,根據不同的Rom,底層實現是不一樣的,有的ROM會幫你處理各種調起scheme,也就是startActivity,有的ROM點一個url,就會拋一個intent出來,讓用戶選擇系統瀏覽器進行載入。

系統默認,提供了一個介面:

有什麼安全隱患呢?
戳這里

如果不知道Js怎麼寫, 請戳我

用PC的截圖意思一下,看出區別了吧。 這里確定、取消點擊以後就得調用 JsResult、JsPromptResult 的 confirm或者cancel。

因為安全問題,大一些的App Native與Js通信都不再用 WebView.addJavascriptInterface(Object) 了,都改用JsPrompt,因為JsPrompt中有message、有JsPromptResult可以返回給Js一些信息,所以橋選中了JsPrompt,另一個備選方案是JsConsole。

大體有這么幾種方式進行傳遞

具體方案實現時,多方面考慮使用何種方式。

還有一個比較牛逼的

系統源碼中均有方法注釋,怎麼用自己看吧。
那麼問題來了

查了下,只有這兩個相關的:
WebBackForwardList BackForwardList()
void clearHistory()
系統提供的關於歷史記錄的操作並不多,因為,不支持單條刪除啊,啊啊啊!
WebViewClient中,還有一個相關callback,當系統更新歷史記錄時回調:
void doUpdateVisitedHistory(WebView view, String url, boolean isReload)

<b>相關問題分析法:歷史棧回退錯誤的定位</b>

絕大多數回退錯誤是由於介面調用、回調中邏輯執行時序錯誤。
定位方法:利用 BackForwardList , doUpdateVisitedHistory 兩個介面在 loadUrl、onPageStart、onPageFinish 以及邏輯相關的地方調用,打log,查看歷史棧,這里注意下由於loarl是非同步的,需要考慮是否加延遲等等保證調用時機的准確。
本人曾經遇到一個問題:在WebChromeClient中的 JsPrompt回調中,直接進行WebView.goBack操作,結果發現WebView確實回退到上一個頁面,但是BackFowardList當前頁面的index未更新的問題,具體見另一個篇blog。

網上有很多關於WebView內存泄露的討論,據傳,老版本的WebView在展示大量圖片的時候,即使 WebView.destory() WebView=null ,也不會銷毀。
在新版本上,實際測試結果:compileSDKVersion 23 不會泄露。
一般,我們如何銷毀WebView比較保險?

這個問題好大。。。
暫時不介紹,另起blog進行說明。

解決方案:
實現回調 void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)

首先,提幾個需要注意的點:

個人歸納總結幾點:

step1 進入開發者模式,勾選「顯示布局邊界」;
step 2,回到你想查看的界面; step 3 假如內容區只有一層基本就是H5 WebView的,多個層級,就是Native。

看到左右圖的差異了吧。
還有另一種方法,RD屌絲們看這里,特別說明,這種方法不太適合瀏覽器。 (自有內核,可能會不準確)

好了,就介紹到這里,零零散散的幾年前寫的文章,第一篇blog,如有不對的地方,還懇請大家指正。

熱點內容
c是高級語言嗎 發布:2025-03-17 12:16:31 瀏覽:521
python泛型 發布:2025-03-17 12:15:01 瀏覽:480
編程貓被盜 發布:2025-03-17 12:02:18 瀏覽:130
海關鎖密碼箱如何設置新密碼 發布:2025-03-17 11:53:50 瀏覽:559
農業卡號的密碼在哪裡改 發布:2025-03-17 11:48:57 瀏覽:965
楊瀾超級訪問 發布:2025-03-17 11:47:17 瀏覽:237
資料庫無損連接 發布:2025-03-17 11:47:16 瀏覽:13
memcachephp類 發布:2025-03-17 11:40:04 瀏覽:829
哈夫曼編碼演算法實現 發布:2025-03-17 11:23:31 瀏覽:385
錄音機可以存儲信息嗎 發布:2025-03-17 11:13:32 瀏覽:174