js调用gecko c++代码

在移植Gecko过程中,遇到基本控件缺失的问题,如alert对话框。为避免复杂的依赖,选择用原生控件替代,并通过JS调用C++代码实现。参照Android Firefox,创建一个名为AndroidBridge的类作为服务,JS通过调用handleGeckoMessage()方法与C++交互。具体步骤包括:修改idl文件,添加头文件和源文件,注册服务,更新Makefile.in,最后在Gecko启动的JS中调用桥接方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在移植gecko的时候发现一些问题,比如gecko连alert对话框这种基本的控件都没有默认实现,包括b2g,在firefox os(那个ui叫gaia)中是纯粹地用html实现的。起初觉得把gaia的的代码,拷过来点就是了,后来发现gaia写得有点复杂,会产生很多依赖,还不如直接用native的控件来实现。做法是参考android的firefox,用js处理部分逻辑,gui相关部分用java,就会产生js调java的需求。我是要js调c++,做法差不多。

        android中有一个叫AndroidBridge的类,把它注册为一个service,js就调用这个类的handleGeckoMessage()方法。这里简单介绍下操作步骤


 1. widget/YOUR_OS/nsINativeBridge.idl

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

[scriptable, uuid(0e93d8f4-5392-48bc-9f4d-3a151773b14c)]
interface nsINativeBridge : nsISupports
{
  AString handleGeckoMessage(in AString message);
};


2.在相应的Makefile.in中的XPIDLSRCS增加这个idl

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值