从浏览器访问Android API

4
我了解如果使用嵌入式WebView,可以从javascript调用Android本地API。但是,是否可以从常规浏览器(如Firefox Mobile或股票浏览器)访问这些API呢?我认为我需要在某个地方显式授予权限,否则这将是一个巨大的安全漏洞。我很难看到创建运行javascript的特殊应用程序的用途;我的应用程序是一个常规Web应用程序,从服务器上运行(不嵌入我的Android应用程序中),并且经常更新(因此不适合嵌入应用程序中)。在某些情况下,直接从网页查询各种信息将非常有用,主要是为了防止Android杀死浏览器并强制重新加载Web应用程序,只因为我必须花费5秒钟跳出(例如)Firefox手动获取信息。

1
看看这个:http://phonegap.com/ - kol
1个回答

5
我认为你无法从常规浏览器中调用Android API(因为它们不是DOM模型的一部分),除非你为每个浏览器构建特定的扩展程序。这将是繁琐的工作,可能不值得,因为这正是嵌入式WebViews存在的原因(例如Phonegap)。
现在,您可以尝试反过来做,即直接从服务器加载您的网页到WebView中。默认情况下,WebViews从设备的本地存储加载其内容,但是使用XHR,您可以调用传统的Web页面并在WebView中显示它们。
这可以通过使用能够嵌入来自您的服务器的内容的div或使用iframe完全加载来自您的浏览器的整个页面来实现。第二种方法将更加透明,因为您可以完全重用当前的Web页面,但是它将阻止您与Web页面通信,因为存在跨域问题安全约束。我建议采用第一种方法,尽管您可能需要重构您的服务器Web页面以使其更好地集成到您的应用程序中。
这将像这样工作(为了简单起见,在示例中我使用JQuery,但您也可以直接使用XHR):
  1. You create a tiny index.html in your webview (phonegap or whatever you are using) and define a that will act as a wrapper to do the calling to your server:

    <html>
    <head>
    <!-- Load all your css and javascript stuff here -->
    </head>
    <body>
    <div id="wrapperdiv"></div>
    </body>
    </html>

  2. Include a javascript to dynamically load the content from your server:

    $(function() {
        $.ajax({
            url: 'http://www.michaels-server.com/your-web-endpoint',
            type: 'GET',
            crossDomain: true,
            success: function(data, textStatus, xhr) {
                $('#wrapperdiv').html(data);
            }
            error: function() { alert("Cannot contact server."); }
        });
    });
    
  3. Configure your embedded webview to allow cross origin requests. In phonegap you do something like:

    <widget ...>

    <!-- widget configuration stuff here -->

    <access origin="*" />

    <!-- more widget configuration stuff -->

    </widget>

您的html包装器中的div现在将从服务器动态加载内容。该页面中的任何JavaScript都可以使用嵌入式Web视图DOM模型(例如Phonegap提供的模型)调用本机API。

希望这能有所帮助。


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