Android的WebView的替代方案

32
有没有人知道 Android WebView 组件的替代方案?由于某些原因,它的功能对我来说不够用:我需要能够捕获访问某个 URL 的每一个请求,当我正在浏览 WML 页面(WAP)时。无论如何,我需要能够执行 Android WebView 不适用于的任务。
我想:“嘿,让我们来玩一下源代码,我非常确信 webviews 正在使用 apache.org 库来访问互联网”。
哦,我错了。Webviews 使用本地代码,这就是我被困住的地方。
所以我在想是否有其他纯 Java 的开源 Web 浏览器视图可以使用,即使速度较慢也没关系,我只需要展示一些基本的 WAP 页面...
提前感谢。

我一直在寻找类似的东西。你到目前为止找到了什么好方法吗?我能找到的一个方法是,我们可以使用WebViewClient中的loadData方法来获取HTML,然后使用webview来呈现它。但资源仍然是一个问题。 - Satya
好的。我现在正在使用自己编写的HttpRequest获取所有数据。然后我解析得到的数据。如果它是常规HTML,我使用webview来呈现它。如果不是,我将其转换为基本HTML,然后使用webview呈现它。我注入javascript,以便每次单击链接时,我都可以拦截事件,并再次执行整个过程。这相当繁重和丑陋,但有效。正如您所看到的,这不是一个漂亮、容易组合的解决方案... - Redwarp
真的。需要很多自定义代码才能使东西正常工作。我还在考虑将Firefox Android版本(Fennec)嵌入我的应用程序中。在那里,我应该能够仅覆盖网络层。尽管目前进展不大。 - Satya
如果你有更好的想法,请告诉我! - Redwarp
2
希望有人能在某个时候给出答案。WebView的性能非常糟糕,但是有许多浏览器应用程序 - 如果Dolphin或Opera或其他人能够制作一个轻量级的WebView替代库,并将其包含在应用程序中,那将是很好的。是的,它会增加应用程序的大小,但会提供更好的性能,并仍然允许开发人员保留对应用程序流程的控制(而不是发送意图到外部浏览器)。 - Chad Schultz
显示剩余5条评论
4个回答

4
您可以通过使用setWebViewClient和setWebChromeClient来扩展WebView的功能。
WebView.setWebViewClient(new MyWebViewClient());
WebView.setWebChromeClient(new WebChromeClient() {..}

您可以通过覆盖以下方法来处理从WebView发送/接收的每个请求:
您可以通过覆盖以下方法来处理从WebView发送/接收的每个请求:
public boolean shouldOverrideUrlLoading(WebView view, String url) {..}
public void onPageStarted(WebView view, String url, Bitmap favicon) {..}
public void onPageFinished(WebView view, String url) {..}

4
我做了,问题是网页视图在手机上的行为不一致。这真的很麻烦。 - Redwarp
1
我会将其标记为答案,因为我最终使用了经典的 Web 视图等内容。我仍然需要解析所有代码,并从 WML 重写 HTML... 这真是一件痛苦的事情。 - Redwarp
更不用说,音频/视频请求从未到达这些方法。 - Iharob Al Asimi

3
跨步项目:https://crosswalk-project.org/可能是您需要的。但请注意,它与原生Webview有所不同。在某些方面更好,在某些方面更差。例如,它支持WebGL(好),但目前背景不能透明(坏)。真正好的消息是,它似乎得到了积极的支持,正在运行自己的Jira来跟踪和修复问题,英特尔似乎非常参与其中。

1
当然,这是一个有趣的方法,但它确实会为应用程序增加很多负担。尽管如此,这可能是在多个版本的Android上保持Web视图一致的最佳解决方案。 - Redwarp

-2

尝试了解 Opera Mini 是如何编程的。

但是如果你想要另一个,我认为你必须自己编程。但是如果它有良好的性能,我会感到惊讶。


-7
       Try this: 

      goButton4.setOnClickListener(new OnClickListener() {
           public void onClick(View view) {               
               Uri uri = Uri.parse("http://tory.com/");
               Intent intent = new Intent(Intent.ACTION_VIEW, uri);
               startActivity(intent);                  
        }
    });

2
好吧,那只会打开浏览器,这绝对不是我要找的...不过还是谢谢。 - Redwarp
阅读并回答! - IliaEremin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接