Android webview在调用loadurl时启动浏览器
我创建了一个Android webview在调用loadurl时启动浏览器,android,android-webview,webviewclient,Android,Android Webview,Webviewclient,我创建了一个活动,它在线性布局中有一个标题和一个web视图。在onResume()方法中,它调用webView.loadUrl(url)。问题在于,活动首先显示标题,其余部分显示空白,然后启动设备浏览器,并显示URL页面。我想看到的是标题下方的WebView中显示的页面。有什么问题吗 编辑: 好的,做了进一步的搜索,找到了这个: 它指向WebView教程 只需实现web客户端并设置它 根据Maudicus和Hit的建议回答我的问题 查看WebView教程。 只需实现web客户端,并将其设置为l
活动
,它在线性布局中有一个标题和一个web视图
。在onResume()
方法中,它调用webView.loadUrl(url)
。问题在于,活动首先显示标题,其余部分显示空白,然后启动设备浏览器,并显示URL页面。我想看到的是标题下方的WebView
中显示的页面。有什么问题吗
编辑:
好的,做了进一步的搜索,找到了这个:
它指向WebView
教程
只需实现web客户端并设置它 根据Maudicus和Hit的建议回答我的问题 查看WebView教程。 只需实现web客户端,并将其设置为loadUrl之前的。最简单的方法是:
myWebView.setWebViewClient(new WebViewClient());
对于Web内容的更高级处理,请考虑色度。
< P>使用此:lWebView.setWebViewClient(new WebViewClient());
这样使用:
@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");
}
请尝试此代码
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);
}
private void startWebView(字符串url){
//创建新的webview客户端以显示进度对话框
//打开url或单击链接时
setWebViewClient(新的WebViewClient(){
进行对话进行对话;
//如果您不使用此方法,url链接将在新浏览器中打开,而不是在webview中
公共布尔值应重写url加载(WebView视图,字符串url){
view.loadUrl(url);
返回true;
}
//在url加载时显示加载程序
public void onLoadResource(最终WebView视图,字符串url){
如果(progressDialog==null){
//在标准情况下,您的活动是
progressDialog=新建progressDialog(view.getContext());
progressDialog.setMessage(“加载…”);
progressDialog.show();
}
}
公共void onPageFinished(WebView视图,字符串url){
试一试{
if(progressDialog.isShowing()){
progressDialog.disclose();
progressDialog=null;
}
}捕获(异常){
异常。printStackTrace();
}
}
});
//在webview上不使用Javascript
webView.getSettings().setJavaScriptEnabled(true);
//其他网络视图选项
/*
webView.getSettings().setLoadWithOverview模式(true);
webView.getSettings().setUseWideViewPort(true);
webView.setScrollBarStyle(webView.SCROLLBARS\u外部\u覆盖);
webView.SetScrollBarFadinEnabled(假);
webView.getSettings().setBuilTinZoomControl(true);
*/
/*
String summary=“您得了192分。”;
loadData(摘要,“text/html”,空);
*/
//在webview中加载url
loadUrl(url);
}
我也面临同样的问题,我找到了解决办法
这里是我的onCreateView()
方法,这里我使用了两种方法打开URL
方法1在浏览器中打开url,然后
方法2在您想要的网络视图中打开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;
} }
让你的活动像这样
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/");
}
}
简单回答你可以这样使用
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");
}
}
如果看到,请启用JavaScript
webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);
如果您正在使用webChromeClient,我建议您同时使用webChromeClient和webViewClient。因为webChromeClient不提供应覆盖的URL加载。两者都可以使用
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
}
}
}
我刚刚发现这取决于URL的格式:
- 在浏览器中打开
- (结尾为/)在webView中打开
webview.loadUrl(url)
不需要设置
webView.setWebViewClient(new WebViewClient())
至少对我来说是这样。
也许这对你们中的一些人有用。我提到这一点是因为你们解决了我的问题。。。谢谢。瑞,考虑写一个问题的答案,如果你找到了一个解决办法,并接受它。这将帮助其他有同样问题的人。我有一个更糟糕的问题。事实证明,如果不使用自定义WebViewClient,即使是重定向也会随浏览器加载。必须阅读此内容-此内容也说明了这一点。。。为了避免WebView在打开初始页面时启动默认浏览器。感谢这个令人难以置信的神奇小魔法+1…给你减一,安卓…很好的答案。也解决了我的问题。这只适用于初始加载吗?如果要在应用程序中导航浏览器,该怎么办?
myWebView.webViewClient=webViewClient()
在Kotlin中setJavaScriptEnabled(true)
将XSS漏洞引入应用程序。如果你不需要JavaScript,就不要使用它启用JavaScript这一行非常重要,否则你会得到你需要启用JavaScript来运行这个应用。
谷歌搜索它只会发现人们对react native有问题,你会发疯的,因为浏览器设置中已经启用了JavaScript。Wini,你可以做smth。像这样@覆盖公共布尔onKeyDown(int-keyCode,KeyEvent-event事件){if(event.getAction()==KeyEvent.ACTION_-DOWN){switch(keyCode){case-KeyEvent.keyCode_-BACK:if(mWebView.canGoBack()){mWebView.goBack()}否则{finish();}返回true;}}返回super.onKeyDown(keyCode,event);}
@DigvijaySingh检查已接受答案的原件。最初它没有这个代码。这是在回答之后加的该死的,我甚至没想到两者都用。我使用webview客户端中的onPageFinished()
和WebChromeClient中的onsolemessage()
。谢谢