gpt4 book ai didi

javascript - 从浏览器访问 Android API

转载 作者:行者123 更新时间:2023-11-29 22:08:32 24 4
gpt4 key购买 nike

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

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

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

最佳答案

我不认为无论如何您都可以从常规浏览器调用您的 Android API(它们没有将它们作为 DOM 模型的一部分),除非您为每个浏览器构建自己的特定扩展。这将是一项乏味的工作,而且可能不值得,因为这正是嵌入式 WebView 存在的原因(如 Phonegap)。

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

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

这会像这样工作(在我使用 JQuery 的示例中为简单起见,但您可以直接使用 XHR 来完成):

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


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

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



    <!-- 小部件配置在这里 -->


    < br/> <!-- 更多小部件配置内容 -->


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

希望这对您有所帮助。

关于javascript - 从浏览器访问 Android API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19614987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com