firefox-addon-webextensions - 使用 GeckoView 的 HtmlPage 和 AndroidApp 之间的消息
问题描述
不幸的是,我使用了一个 WebView 不可用的平台,因此,我无法利用 JavascriptInterface 的简单性从我的网页与我的应用程序进行交互。
是否有一个完整的(直接的)示例解释如何使用 Geckoview 与我的 Android 应用程序交互页面?
我尝试了此页面(和其他)上的步骤:
https://firefox-source-docs.mozilla.org/mobile/android/geckoview/consumer/web-extensions.html
坦率地说,我从来没有见过隐藏这么多细节的页面。
像这样简单的 HTML 页面,托管在“http://example.com/x.html”中(比如说):
<html>
<script>
function appToPage(s)
{
log('received:' + s);
}
function pageToApp(s)
{
// do something to send s to app
log('sent:' + s);
}
function log(s)
{
var x = document.getElementById('x');
x.innerHTML += '<br>' + s;
}
var i = 0;
</script>
<body>
<input type=button onclick="pageToApp('helloFromPage' + (i++))" value="SEND">
<div id="x"></div>
</body>
</html>
<script>
log('started');
</script>
安卓端:
public class MainActivity extends AppCompatActivity
{
protected void onCreate(Bundle savedInstanceState)
{
...
//all the stuff needed for GeckoView and extensions
geckoSession.loadUri("http://example.com/x.html");
...
}
// when some user press some button in the browser
public void onSendButtonClick()
{
// do somenthing to call appToPage("helloFromApp");
}
// this should be called when a message arrives
public void onMessageFromPage(String s) // or whatever object as parameter (JSON, for example)
{
Log.d("msgFromPage", s)
}
...
}
解决方案
我也在使用一个月前的 Geckoview。要与您的网站内容交互,您必须使用网络扩展。有两种方法:
- 消息传递
- 端口消息
我正在分享一个示例链接:https ://searchfox.org/mozilla-central/source/mobile/android/examples
推荐阅读
- javascript - Instagram iOS webview 和位置:固定为 100% 高度
- java - 带有导航 ui android 的折叠工具栏
- android - 在 Kotlin 中将位图保存为图像
- java - 如何在 Spring Boot 中创建一个有效的 TCP Server 套接字以及如何处理传入的消息?
- azure - 有没有办法删除在 Android 上使用 Xamarin 进行 Azure Active Directory B2C 注册身份验证期间出现的自定义浏览器框架?
- r - R studio:编写一个 for 循环以将自定义函数应用于输入向量,并为该向量中的每个元素输出一个单独的数据帧
- sql-server - 将 Wed Oct 14 08:00:00 CDT 2020 格式转换为 DateOnly 和 Time Only
- python - python3 中的 repmat 用于 100 x 3 矩阵,没有尺寸错误。Matlab repmat 工作正常但不是 pytthon3
- python - 将投票分数总和注释到 Django 中的项目
- php - 需要获取所有登录用户作为对象关注的用户