首页 > 解决方案 > 使用 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)
   }
   ...
}      

标签: firefox-addon-webextensionsgeckoview

解决方案


我也在使用一个月前的 Geckoview。要与您的网站内容交互,您必须使用网络扩展。有两种方法:

  1. 消息传递
  2. 端口消息

我正在分享一个示例链接:https ://searchfox.org/mozilla-central/source/mobile/android/examples


推荐阅读