Android webview在调用loadurl时启动浏览器
Posted
技术标签:
【中文标题】Android webview在调用loadurl时启动浏览器【英文标题】:Android webview launches browser when calling loadurl 【发布时间】:2011-12-06 11:31:34 【问题描述】:我创建了一个Activity
,它在LinearLayout
中有一个标题和一个网络视图。在onResume()
方法中,它调用webView.loadUrl(url)
。问题是活动首先显示标题而屏幕的其余部分为空白,然后设备浏览器启动时显示 URL 页面。我想看到的是标题下方WebView
中显示的页面。可能是什么问题?
编辑: 好的,做了一些进一步的搜索,找到了这个:
Clicking URLs opens default browser
指向WebView
教程here。
只需实现网络客户端并设置它。
【问题讨论】:
我提到这个是因为你解决了我的问题...谢谢。 @Ray,如果您找到了解决方案,请考虑写下这个问题的答案,并接受它。这将帮助其他有同样问题的人。 我遇到了一个更严重的问题。事实证明,如果不使用自定义 WebViewClient,即使是 redirect 也会随浏览器一起加载。 必读 - WebView launches browser 这个也讲了...youtube.com/watch?v=4bIF5In1c8s 【参考方案1】:根据 Maudicus 和 Hit 的建议回答我的问题。
查看 WebView 教程here。 只需实现 Web 客户端并在 loadUrl 之前设置它。最简单的方法是:
myWebView.setWebViewClient(new WebViewClient());
要对 Web 内容进行更高级的处理,请考虑使用 ChromeClient。
【讨论】:
避免WebView在打开初始页面时启动默认浏览器。 感谢这个令人难以置信的神奇小魔法! +1 ...为你减一,android ... 优秀的答案。也解决了我的问题。 这仅适用于初始加载吗?如果您想在应用内导航浏览器怎么办?myWebView.webViewClient = WebViewClient()
在 Kotlin 中!【参考方案2】:
使用这个:
lWebView.setWebViewClient(new WebViewClient());
【讨论】:
@DigvijaySingh 检查已接受答案的原件。最初它没有此代码。它是在这个答案之后添加的【参考方案3】:这样使用:
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dedline);
WebView myWebView = (WebView) findViewById(R.id.webView1);
myWebView.setWebViewClient(new WebViewClient());
myWebView.loadUrl("https://google.com");
【讨论】:
【参考方案4】:像这样制作你的活动。
public class MainActivity extends Activity
WebView browser;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// find the WebView by name in the main.xml of step 2
browser=(WebView)findViewById(R.id.wvwMain);
// Enable javascript
browser.getSettings().setJavaScriptEnabled(true);
// Set WebView client
browser.setWebChromeClient(new WebChromeClient());
browser.setWebViewClient(new WebViewClient()
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
view.loadUrl(url);
return true;
);
// Load the webpage
browser.loadUrl("http://google.com/");
【讨论】:
setJavaScriptEnabled(true)
将 XSS 漏洞引入您的应用程序。如果您不需要 JavaScript,请不要使用它
启用 JavaScript 的那一行非常重要,否则你会得到 You need to enable JavaScript to run this app.
并用谷歌搜索它只会发现人们对 react native 有问题,你会发疯的,因为 JavaScript 已经在浏览器设置中启用.
Wini,你可以的。像这样@ Override public boolean onKeyDown(int keyCode, KeyEvent event) if (event.getAction() == KeyEvent.ACTION_DOWN) switch (keyCode) case KeyEvent.KEYCODE_BACK: if (mWebView.canGoBack()) mWebView.goBack(); else finish(); return true; return super.onKeyDown(keyCode, event);
【参考方案5】:
我遇到了同样的问题,我找到了解决方案 Android's official Documentation about WebView
这是我的onCreateView()
方法,这里我使用了两种方法打开网址
方法 1 正在浏览器中打开 url 并且
方法 2 正在您想要的 WebView 中打开 url。
我正在为我的应用程序使用方法 2,这是我的代码:
public class MainActivity extends Activity
private WebView myWebView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
View rootView = inflater.inflate(R.layout.fragment_webpage_detail, container, false);
// Show the dummy content as text in a TextView.
if (mItem != null)
/* Method : 1
This following line is working fine BUT when we click the menu item then it opens the URL in BROWSER not in WebView */
//((WebView) rootView.findViewById(R.id.detail_area)).loadUrl(mItem.url);
// Method : 2
myWebView = (WebView) rootView.findViewById(R.id.detail_area); // get your WebView form your xml file
myWebView.setWebViewClient(new WebViewClient()); // set the WebViewClient
myWebView.loadUrl(mItem.url); // Load your desired url
return rootView;
【讨论】:
【参考方案6】:试试这个代码...
private void startWebView(String url)
//Create new webview Client to show progress dialog
//When opening a url or click on link
webView.setWebViewClient(new WebViewClient()
ProgressDialog progressDialog;
//If you will not use this method url links are opeen in new brower not in webview
public boolean shouldOverrideUrlLoading(WebView view, String url)
view.loadUrl(url);
return true;
//Show loader on url load
public void onLoadResource (final WebView view, String url)
if (progressDialog == null)
// in standard case YourActivity.this
progressDialog = new ProgressDialog(view.getContext());
progressDialog.setMessage("Loading...");
progressDialog.show();
public void onPageFinished(WebView view, String url)
try
if (progressDialog.isShowing())
progressDialog.dismiss();
progressDialog = null;
catch(Exception exception)
exception.printStackTrace();
);
// Javascript inabled on webview
webView.getSettings().setJavaScriptEnabled(true);
// Other webview options
/*
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(false);
webView.getSettings().setBuiltInZoomControls(true);
*/
/*
String summary = "<html><body>You scored <b>192</b> points.</body></html>";
webview.loadData(summary, "text/html", null);
*/
//Load url in webview
webView.loadUrl(url);
【讨论】:
【参考方案7】:如果您看到 an empty page,请启用 JavaScript。
webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);
【讨论】:
【参考方案8】:简单回答你可以这样使用
public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
WebView webView = new WebView(this);
setContentView(webView);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.google.com");
【讨论】:
【参考方案9】:如果您使用的是 webChromeClient,我建议您同时使用 webChromeClient 和 webViewClient。因为 webChromeClient 不提供 shouldOverrideUrlLoading。两者都可以使用。
webview.webViewClient = WebViewClient()
webview.webChromeClient = Callback()
private inner class Callback : WebChromeClient()
override fun onProgressChanged(view: WebView?, newProgress: Int)
super.onProgressChanged(view, newProgress)
if (newProgress == 0)
progressBar.visibility = View.VISIBLE
else if (newProgress == 100)
progressBar.visibility = View.GONE
【讨论】:
该死的,我什至没有想到同时使用这两种方法。我使用来自WebViewClient
的onPageFinished()
和来自WebChromeClient
的onConsoleMessage()
。谢谢!【参考方案10】:
我刚刚发现这取决于 URL 的格式:
https://example.com/example 在浏览器中打开 https://example.com/example/(以 / 结尾)在 webView 中打开我的代码只是使用
webview.loadUrl(url)
无需设置
webView.setWebViewClient(new WebViewClient())
至少在我的情况下。 也许这对你们中的一些人有用。
【讨论】:
它仍然在浏览器中以结束/不正确的答案打开.. 实际上,我发现了同样的行为。不知道如何解释,但这也是我所看到的。以上是关于Android webview在调用loadurl时启动浏览器的主要内容,如果未能解决你的问题,请参考以下文章
关于Android中WebView在加载网页的时候,怎样应用本地的CSS效果