我已在我的WebView
中加載了一個外部URL。現在我需要的是,當用戶點擊加載頁面上的鏈接時,它必須像普通瀏覽器一樣工作,並打開同一個WebView
中的鏈接。但它打開默認瀏覽器並在那裏加載頁面?單擊URL將打開默認瀏覽器
我已啓用JavaScript。但仍然無法正常工作。我忘了什麼嗎?
我已在我的WebView
中加載了一個外部URL。現在我需要的是,當用戶點擊加載頁面上的鏈接時,它必須像普通瀏覽器一樣工作,並打開同一個WebView
中的鏈接。但它打開默認瀏覽器並在那裏加載頁面?單擊URL將打開默認瀏覽器
我已啓用JavaScript。但仍然無法正常工作。我忘了什麼嗎?
如果您使用的是WebView
你必須自己攔截點擊,如果你不想在默認的Android行爲。
您可以監視使用WebViewClient
在WebView
事件。你想要的方法是shouldOverrideUrlLoading()
。這允許您在選擇特定URL時執行自己的操作。
您使用setWebViewClient()
method設置了WebView
的WebViewClient
。
如果你看一下WebView
sample in the SDK有一個例子,你想要的東西,其中一樣。它是那樣簡單:
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
如果你不觸發網址加載方法重定向你可能需要onLoadResource的覆蓋。在這種情況下,我嘗試了以下內容:
@Override
public void onLoadResource(WebView view, String url)
{
if (url.equals("http://redirectexample.com"))
{
//do your own thing here
}
else
{
super.onLoadResource(view, url);
}
}
官方documentation說,點擊一個鏈接在網頁視圖將推出應用程序處理URL。你需要重寫此默認行爲
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
,或者如果沒有條件邏輯的方法簡單地做到這一點
myWebView.setWebViewClient(new WebViewClient());
在代碼中添加這2條線 -
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
Arulx Z的回答正是我所期待的。
我正在寫與抽屜式導航應用程序與recyclerview和網頁視圖,保持內部應用程序的網頁瀏覽,無論超鏈接的點擊(因此不啓動外部Web瀏覽器)。對於這將足以把下面兩行代碼:
mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());
正是你的WebView聲明下。
這裏是我的WebView實現的代碼示例:
public class WebView1 extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
wv.setWebViewClient(new WebViewClient()); //the lines of code added
wv.setWebChromeClient(new WebChromeClient()); //same as above
wv.loadUrl("http://www.google.com");
}}
這種方式,每一個環節都在網站上點擊你將裏面的WebView加載。 (在所有SDK的更新中使用Android Studio 1.2.2)
方法boolean shouldOverrideUrlLoading(WebView view, String url)
已在API 24中棄用。如果您支持新設備,則應使用boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)
。
你可以做這樣的事情同時使用:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
newsItem.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
}
});
} else {
newsItem.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
}
看起來這是'WebViewClient'的默認行爲,不需要子類,如果這是你正在做的。我只是通過執行'myWebView.setWebViewClient(新的WebViewClient());' – Adam 2012-10-07 20:25:32
@ dave-webb來更新示例以便不調用loadUrl。 每個人都在閱讀 - 請不要複製代碼(從回調中返回false而不是調用view.loadUrl)。調用loadUrl會引入一個細微的錯誤,如果您在頁面內使用自定義方案URL(例如
@Adam ++ - 是的,我也注意到了這一點 - 我不明白爲什麼我的一個Web視圖不使用系統瀏覽器,這是因爲我已經添加了一個新的Web客戶端,它只是重寫ANOTHER方法。這花了我一段時間來調試。 – 2014-02-15 00:28:51