Native 和JS的通信方式 - xkli/WXSample GitHub Wiki

Native 和 JS目前有两种通信方式

  1. Native component和JS component直接进行事件的传递,比如 click,appear等。 实现代码:

    WXSDKManager.java 
    /**
       * 
       * @param instanceId 当前instance 的ID WXSDKInstance.getInstanceId()获取。
       * @param ref 当前component的ref WXComponent.getRef()
       * @param type 当前事件的类型。click,appear等
       * @param params 传给component的参数
       */
      public void fireEvent(final String instanceId, String ref, String type, Map<String, Object> params){
        fireEvent(instanceId,ref,type,params,null);
      }
    

    示例:

    mHost.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              Map<String, Object> params = new HashMap<>();
              int[] location = new int[2];
              mHost.getLocationOnScreen(location);
              params.put("x",location[0]);
              params.put("y",location[1]);
              params.put("width",mDomObj.getCSSLayoutWidth());
              params.put("height",mDomObj.getCSSLayoutHeight());
              WXSDKManager.getInstance().fireEvent(mInstanceId,
                                                   mDomObj.ref,
                                                   WXEventType.CLICK,
                                                   params);
            }
          });
    
  2. Native 回调 JS 函数,多用于Module。

    /**
       * @param instanceId 当前instance 的ID WXSDKInstance.getInstanceId()获取。
       * @param funcId 需要回调的JS函数,有js端传入
       * @param data 需要传给JS的参数
       */
      public void callback(String instanceId, String funcId, Map<String, Object> data) {
        mBridgeManager.callback(instanceId, funcId, data);
      }
    

    调用示例:

    public class WXShareModule extends WXModule {
    
      @WXModuleAnno
      public void doShare(String params,String callback) {
          Map<String,Object> data=new HashMap<>();
          data.put("result","success");
          WXSDKManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callback, data);
      }
    }