从浏览器访问安卓API
accessing Android API from browser
我知道如果我使用嵌入式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 执行此操作):
你在webview(phonegap或你正在使用的任何内容)中创建一个小索引.html并定义一个将充当包装器来调用你的服务器:
<html>
<head>
<!-- Load all your css and javascript stuff here -->
</head>
<body>
<div id="wrapperdiv"></div>
</body>
</html>
包含一个 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."); } }); });
配置嵌入式 Web 视图以允许跨源请求。在 phonegap 中,您可以执行以下操作:
<小部件...>在这里 <<br/>
访问 origin="*"/>
小部件...>
html 包装器中的div 现在将从服务器动态加载内容。该页面中的任何JavaScript都可以使用嵌入式Webviews DOM模型调用Native API,例如Phonegap提供的模型。
希望这有帮助。
- 将JSON传递给Jade,并使用相同的数据进行API访问
- 使用公共API访问(无OAuth)从JavaScript编写Google电子表格
- 仅允许使用 Dropbox API 访问特定网站
- 如何在 AngularJS 中从 API 访问数组数据
- 没有嵌入API访问-iframely
- 通过驱动器API访问文件夹中的文件
- 如何使用 Web 音频 API 访问输出缓冲区
- Facebook API:访问页面对话
- 如何使用图形 API 访问用户喜欢的信息
- 我可以使用Facebook Graph API访问用户的好友状态吗?
- Twitch TV API 访问属性名称值并更新它
- 地图框/传单:有效的GeoJSON生成“未捕获的错误:需要API访问令牌”
- 创建具有 API 访问权限的机场数据库
- 使用 ArcGIS JavaScript API 访问服务器文件
- Firebase简单登录和Twitter API访问
- Trello API访问仅适用于一个人
- 使用javascript SDK或Rest API访问分析数据
- 使用api访问html5视频元素
- 跨域API访问安全性
- 使用Javascript Yammer API访问数据外部网络