从浏览器访问安卓API

accessing Android API from browser

本文关键字:API 访问 浏览器      更新时间:2023-09-26

我知道如果我使用嵌入式WebView,我可以从javascript调用android原生API。

但是,是否可以从Android中的常规浏览器(例如Firefox Mobile或股票浏览器)访问这些API? 我想我必须在某处明确授予权限,否则这将是一个很大的安全漏洞。

我无法看到使用创建运行javascript的特殊应用程序;我的应用程序是一个从服务器上运行的常规Web应用程序(未嵌入在我的Android应用程序中)并且经常更新(因此不适合嵌入到应用程序中),在某些情况下,添加直接从网页查询各种信息的功能会很有用, 主要是为了防止Android杀死浏览器并在重新进入时强制长时间重新加载Web应用程序,因为我必须花费5秒钟才能跳出(例如)Firefox手动获取信息。

我认为无论如何你

都不能从常规浏览器调用你的Android API(他们没有将它们作为DOM模型的一部分),除非你为每个浏览器构建自己的特定扩展。这将是繁琐的工作,可能不值得,因为这正是嵌入式WebView存在的原因(如Phonegap)。

现在,您始终可以尝试相反的方式,即直接从服务器从WebView加载网页。默认情况下,Web 视图从设备的本地存储加载其内容,但是,使用 XHR,您可以调用传统网页并在 Web 视图中显示它们。

这可以使用div 来实现,divs 可以从您的服务器嵌入一段内容,或者 iframe 从您的浏览器完全加载整个页面。第二种方法将更加透明,因为您可以完全重用当前的网页,但是由于跨源问题的安全约束,它将阻止您将包装器与网页进行通信。我建议使用第一种方法,尽管您可能必须重构服务器网页以使它们更好地与您的应用程序集成。

这将像这样工作(为了简单起见,我在使用 JQuery 的示例中,但您可以直接使用 XHR 执行此操作):

  1. 你在webview(phonegap或你正在使用的任何内容)中创建一个小索引.html并定义一个将充当包装器来调用你的服务器:

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

  2. 包含一个 javascript 以从服务器动态加载内容:

    $(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. 配置嵌入式 Web 视图以允许跨源请求。在 phonegap 中,您可以执行以下操作:

    <小部件...>在这里 <<br/>
    访问 origin="*"/>






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

希望这有帮助。