Android程序中嵌入WebView,单击其中的链接时无反应,请问是啥原因引起的?如何解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android程序中嵌入WebView,单击其中的链接时无反应,请问是啥原因引起的?如何解决?相关的知识,希望对你有一定的参考价值。

触发条件:单击android系统控件Button弹出一个嵌入了WebView的PopupWindow时一切正常,而改用单击WebView加载的页面中的链接弹出嵌入了另一个WebView的PopupWindow时则出现上述情况,程序随后强制关闭【应用程序无响应-ANR】。
同样的弹窗操作只是换了不同的事件源而已,结果一种运行正常,另一种运行不正常。初步判断可能是javascript代码调用java代码时阻塞了UI线程,导致弹出的PopupWindow中嵌入的WebView显示正常但不能对其操作【点击链接会出现ANR】。为什么会出现阻塞?其中的原理是什么?目前不得而知,望高手指点。

你的问题描述的太简单了,anr错误的话,肯定是内存崩溃了。 你看看你代码是否有什么循环一直在跑,一个页面显示2个webview是不会有问题的。

具体还是要看你写的代码。自己仔细查查看。
参考技术A 有错误啊。。仔细看看。。

将 instagram 嵌入 Android WebView

【中文标题】将 instagram 嵌入 Android WebView【英文标题】:Embed instagram into Android WebView 【发布时间】:2015-06-06 18:33:43 【问题描述】:

我有一个带有 WebView 的 Android 应用程序,我在其中显示的内容包括嵌入的推文和嵌入的 instagram 照片。

在这两种情况下,我都会按照文档中的说明复制块引用,并以这种方式显示:

    String html = "<!DOCTYPE HTML><html><head><style>a color:#333333;</style></head><body>"+content.substring(0, blockquoteEnd)+"<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script></body></html>";
    WebView tText = new WebView(getActivity());
    tText.loadDataWithBaseURL("", html, "text/html", "UTF-8", "");
    WebSettings webSettings = tText.getSettings();
    webSettings.setJavaScriptEnabled(true);
    textWrapper.addView(tText);

我的推文仅以纯文本形式显示,但我用这一行解决了这个问题:

tText.loadDataWithBaseURL("https://twitter.com", html, "text/html", "UTF-8", "");

我已经尝试对 Instagram 照片做同样的事情:

tText.loadDataWithBaseURL("https://instagram.com", html, "text/html", "UTF-8", "");

但它不起作用,所有 instagram 照片只显示纯文本描述。

我找不到任何关于如何在 Android WebViews 中嵌入 Instagram 的文档(官方或非官方)。有人知道如何解决这个问题吗?

【问题讨论】:

你解决了什么问题?我将嵌入 instagram html 放入我的WebView,但我看到的是 instagram 徽标而不是实际图像。 不,抱歉,我找不到解决此问题的方法。 我刚刚尝试将 baseUrl 设置为 https://instagram.com 并且块开始加载图像,但调整大小错误(图像重叠或被剪裁)。 有人有解决方案吗? 【参考方案1】:

在尝试了很多组合并在此处引用其他答案后,这对我有用:

WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadDataWithBaseURL("https://instagram.com", myHtmlString, "text/html", "UTF-8", "");

【讨论】:

我正在尝试将块引用加载到 webview 中,并且 loadDataWithBaseURL() 方法也适用于我。【参考方案2】:

您是否尝试使用此链接? https://instagram.com/developer/embedding/

当您尝试嵌入 Instagram 时,我不确定您的“html”参数是什么,但假设您有要嵌入的项目的链接,您可以向 http://api.instagram.com/oembed 发送请求,并附上项目的URL 并获取相关信息(请参阅链接底部的“开发人员嵌入”);收到响应后,您应该能够从 JSON 对象中检索“html”部分并将其作为第二个参数传递给 loadDataWithBaseURL。

此外,我试图在我的 Android 应用程序中嵌入 Instagram 和 Facebook 视频,但无法做到,因为我调用 loadDataWithBaseURL 时使用 null 作为第一个参数,而不是 Instagram/FB URL。今天早些时候我看到你的问题,注意到你的第一个参数和我的不同,所以我改变了它,然后一切正常。所以谢谢你:-)

【讨论】:

也许现在有一个更具体的移动教程,但是当我发布我的答案时,这是我发现在我的移动应用程序中嵌入 Instagram 的唯一方法 - 使用 WebView,因此网络教程很有帮助,或者至少对我来说是..【参考方案3】:

我遇到了同样的问题。这里的方法 loadDataWithBaseURL(),在第一个参数中它需要 baseUrl。我在谷歌上搜索过 baseUrl,在某个地方我发现了一些建议,比如它只保留 null,"" 或 Fake://。但我的问题并没有解决,但在那之后,我给了我网站的 baseUrl,从那里嵌入 Instagram 重定向,我解决了我的问题。并且还解决了 Twitter 视频播放问题。

通过 https://developer.android.com/reference/android/webkit/WebView.html at loadData 部分在这里你会明白的。

【讨论】:

以上是关于Android程序中嵌入WebView,单击其中的链接时无反应,请问是啥原因引起的?如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上单击“播放”按钮时,YouTube 嵌入式视频会显示开发人员选项

将 instagram 嵌入 Android WebView

在android的webview中嵌入一段HTML代码或Javascript脚本

如何在 Android Espresso Kakao 测试中单击 webview 按钮

在webview中单击按钮后,如何在android应用程序中从webview打开外部应用程序?

强制横向时Android应用程序(嵌入式WebView)崩溃