单击链接时,Android WebView 崩溃
Posted
技术标签:
【中文标题】单击链接时,Android WebView 崩溃【英文标题】:Android WebView crashes when clicking on a link 【发布时间】:2010-12-06 06:06:39 【问题描述】:我的Activity
中有一些WebView
小部件。我使用loadData()
设置内容,这个html 包含一个链接。我的一些WebViews
工作正常,当我单击链接时,Web 浏览器会在新窗口中启动,但是当我单击链接时,有些会导致我的应用程序崩溃。
10-13 08:45:24.257: ERROR/androidRuntime(751): Uncaught handler: thread main exiting due to uncaught exception
10-13 08:45:24.308: ERROR/AndroidRuntime(751): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
10-13 08:45:24.308: ERROR/AndroidRuntime(751): at android.app.ApplicationContext.startActivity(ApplicationContext.java:627)
10-13 08:45:24.308: ERROR/AndroidRuntime(751): at android.content.ContextWrapper.startActivity(ContextWrapper.java:236)
10-13 08:45:24.308: ERROR/AndroidRuntime(751): at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:185)
10-13 08:45:24.308: ERROR/AndroidRuntime(751): at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:277)
10-13 08:45:24.308: ERROR/AndroidRuntime(751): at android.os.Handler.dispatchMessage(Handler.java:99)
10-13 08:45:24.308: ERROR/AndroidRuntime(751): at android.os.Looper.loop(Looper.java:123)
10-13 08:45:24.308: ERROR/AndroidRuntime(751): at android.app.ActivityThread.main(ActivityThread.java:3948)
10-13 08:45:24.308: ERROR/AndroidRuntime(751): at java.lang.reflect.Method.invokeNative(Native Method)
10-13 08:45:24.308: ERROR/AndroidRuntime(751): at java.lang.reflect.Method.invoke(Method.java:521)
10-13 08:45:24.308: ERROR/AndroidRuntime(751): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
10-13 08:45:24.308: ERROR/AndroidRuntime(751): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
10-13 08:45:24.308: ERROR/AndroidRuntime(751): at dalvik.system.NativeStart.main(Native Method)
当我单击 URL 时,WebView
触发的 Intent
似乎存在问题,但我认为我无法控制此 Intent
。
有人知道吗?
我用这个AsyncTask
来设置WebView
里面的内容,效果很好:
public class SetAdTask extends AsyncTask<Void, Void, String>
private Main main;
private WebView webView;
public SetAdTask(Main main, WebView webView)
this.main = main;
this.webView = webView;
protected void onPreExecute()
Main.Log("onPreExecute()");
protected String doInBackground(Void... params)
Main.Log("doInBackground()");
return main.getRestClient().getAdCode();
protected void onPostExecute(String result)
Main.Log("onPostExecute()");
String html = "<html><head><title>ad</title></head><body>";
html += "<div style=\"color:grey;font-size:12px;\">ADVERTISEMENT<br/>";
html += result;
html += "</body></html>";
webView.loadData(html, "text/html", "latin-1");
【问题讨论】:
哦,我发现了问题.. 我用错误的上下文启动了 webView... 我使用了 viewView = new WebView(main.getApplicationContext()) ... 看起来 webview 渲染正常,在这种情况下,但无法正确处理意图...... T 你可以回答你自己的问题,你知道的。 【参考方案1】:问题是我的webview
使用错误的上下文初始化...
我用过:
WebView w = new WebView(this.getApplicationContext())
哪个崩溃了...
正确的context
是activity
本身
WebView w = new WebView(this)
【讨论】:
做到了,非常感谢!虽然这个问题只出现在某些设备上。哦,好吧,现在它适用于所有人。 我遇到了同样的问题,但ListView
项目中的可点击链接。这解决了它;谢谢!【参考方案2】:
如果您不想将活动用作您的上下文,则此问题的另一个(令人惊讶的)解决方案是为WebView
设置一个空的WebViewClient
:
webView.setWebViewClient(new WebViewClient());
这似乎是一个 Android 错误:根据 API,您可以使用上下文对象来初始化 webview(但这可能会导致您提到的错误)。
【讨论】:
如果我能再给你投票 100 次,我会的!具有应用程序上下文的 WebView 是跨方向更改维护 WebView 内部状态的关键能力。很棒的发现。 太棒了!哈利路亚!以上是关于单击链接时,Android WebView 崩溃的主要内容,如果未能解决你的问题,请参考以下文章
在android webview应用程序的页面上单击链接时如何防止显示加载微调器?
Android程序中嵌入WebView,单击其中的链接时无反应,请问是啥原因引起的?如何解决?
当我在 WEBVIEW 应用程序中单击网站服务器中的链接时,PDF 未加载
尝试退出插件 webview 时,带有集成插件的 Cordova 应用程序在 webview 上崩溃(android 测试)