WebView 没有加载网页
Posted
技术标签:
【中文标题】WebView 没有加载网页【英文标题】:WebView is not loading webpage 【发布时间】:2017-07-03 15:30:13 【问题描述】:我正在使用WebView
加载网站。但是它非常慢并且在加载特定网站时会泄漏。
我正在使用以下代码加载WebView
。
@Override
protected void onNewIntent(Intent intent)
if (intent.getStringExtra("url") != null)
webView.loadurl(intent.getStringExtra("url"));
但我在用以下方法初始化WebView
后,在onCreate()
方法中调用webView.loadUrl(Config.URL);
(Config.URL
可能包含与上面指定的相同的url)。
this.webView = (WebView) findViewById(R.id.wv);
this.webView.getSettings().setjavascriptEnabled(true);
this.webView.getSettings().setLoadsImagesAutomatically(true);
this.webView.getSettings().setDomStorageEnabled(true);
this.webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
MyClient client = new MyClient(WebActivity.this, (ProgressBar)findViewById(R.id.progressBar));
webView.setWebViewClient(client);
从
onCreate()
加载工作正常(不好,太慢了)。但 从onNewIntent()
加载的同一网址不起作用!!!。 在我在onNewIntent()
中执行此操作后,没有使用加载任何 URLwebView.loadurl()
并且当前页面变得无法移动。 IE。这 滚动条在WebView
中移动,但页面没有滚动。我测试过onCreate()
中的相同 URL 并且它正在工作。
为此,我使用
传递 urlintent.putExtra("url", Config.URL+targetUrl);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
通知中的待处理意图。尽管它可以在某些设备上运行,例如 Google Nexus。但它不适用于大多数手机。 我有
android:hardwareAccelerated="true"
我的客户
public class MyClient extends WebViewClient
private Context context;
private Activity activity;
private Handler handler;
private Runnable runnable;
private ProgressBar viewBar;
private String ret,ret2;
public void setFirstLoad(boolean firstLoad)
this.firstLoad = firstLoad;
private boolean firstLoad=false;
public MyClient(Activity activity, ProgressBar bar)
this.context = activity.getApplicationContext();
this.activity = activity;
viewBar=bar;
handler=new Handler();
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
/*if (url.startsWith("tel:"))
Intent intent = new Intent(Intent.ACTION_DIAL,
Uri.parse(url));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
else if(url.startsWith("http:") || url.startsWith("https:"))
*//*view.setVisibility(View.GONE);
viewBar.setVisibility(View.VISIBLE);*//*
view.loadUrl(url);
return true;*/
if (Uri.parse(url).getHost().equals("www.somepage.com"))
return false;
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
try
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Answers.getInstance().logShare(new ShareEvent()
.putContentId(Build.USER)
.putMethod(shareName(url))
.putContentName(contentDecode(url))
.putContentType("news_share"));
catch (android.content.ActivityNotFoundException e)
Log.e("Activity not found",e.toString());
Toast.makeText(context,"Application not found",Toast.LENGTH_LONG).show();
return true;
@Override
public void onReceivedError(final WebView view, int errorCode, String description, final String failingUrl)
//Clearing the WebView
try
view.stopLoading();
catch (Exception e)
try
view.clearView();
catch (Exception e)
if (view.canGoBack())
view.goBack();
view.loadUrl("about:blank");
//Showing and creating an alet dialog
AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity);
alertDialog.setTitle("Error");
alertDialog.setMessage("No internet connection was found!");
alertDialog.setPositiveButton("Retry", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
view.loadUrl(failingUrl);
);
AlertDialog alert = alertDialog.create();
alert.show();
//Don't forget to call supper!
super.onReceivedError(view, errorCode, description, failingUrl);
@Override
public void onLoadResource(final WebView view, String url)
super.onLoadResource(view, url);
//injectScriptFile(view, "js/script.js");
injectCSS(view,"css/style.css");
if (firstLoad)
firstLoad=false;
view.setVisibility(View.INVISIBLE);
viewBar.setVisibility(View.VISIBLE);
runnable=new Runnable()
@Override
public void run()
viewBar.setVisibility(View.GONE);
view.setVisibility(View.VISIBLE);
;
handler.postDelayed(runnable,2000);
// test if the script was loaded
// view.loadUrl("javascript:setTimeout(hideMe(), 200)");
/*@Override
public void onPageFinished(final WebView view, String url)
//System.gc();
*/
@Override
public void onPageFinished(WebView view, String url)
super.onPageFinished(view, url);
System.gc();
问题是:在onNewIntent()
中使用loadurl()
方法有什么问题?
【问题讨论】:
对不起,先生,您是否在 intent.getStringExtra("url") 中找到了想要的结果?另外,LogCat 是否有奇怪的消息?谢谢。 @statosdotcom 是的,我有意找到它。在 Logcat 中显示网页正在加载但不是 display.ie。页面与以前没有变化 如果您正在使用 OnPause 方法,请包括它,因为它在 OnNewIntent 之前被调用。你在 OnNewIntent 上也有一个断点,即你确定它被命中了吗? @StevenMarkFord 我没有使用任何onPause
方法。不幸的是,我对OnNewIntent
很感兴趣。我之前也问过question。 :) 我一直在等待有人来回应。无论如何谢谢..
@CoDFather 暂时注释掉“shouldOverrideUrlLoading”,然后重试看看是否有效。我认为这弄乱了 OnNewIntent
【参考方案1】:
从你加载 webview 的地方试试这个
web.setWebViewClient(new WebViewClient()
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
return super.shouldOverrideUrlLoading(view, url);
);
【讨论】:
【参考方案2】:您可以使用 webclient 来处理 webview。在这里,我包括加载的 javascript。
String aboutURL="YOUR URL";
final ProgressDialog pd = ProgressDialog.show(, "", "Please wait", true);
WebSettings settings=Webview.getSettings();
settings.setJavaScriptEnabled(true);
settings.setAppCacheEnabled(true);
settings.setDomStorageEnabled(true);
settings.setLoadsImagesAutomatically(true);
settings.setDatabaseEnabled(true);
settings.setRenderPriority(WebSettings.RenderPriority.HIGH);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
Webview.setWebViewClient(new WebViewClient()
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
pd.show();
@Override
public void onPageFinished(WebView view, String url)
pd.dismiss();
);
Webview.loadUrl(aboutURL);
这里加载是基于网络处理的
【讨论】:
【参考方案3】:使用 Handler 如下发布延迟操作将解决此问题,但我不知道为什么。
new Handler().post(webView.loadurl(url));
【讨论】:
以上是关于WebView 没有加载网页的主要内容,如果未能解决你的问题,请参考以下文章
android webview 加载url有延迟怎么办,有没有比wenview更好的第三方控件