cordova开发坑

来源:互联网 发布:盈建科软件教学视频 编辑:程序博客网 时间:2024/06/11 12:20

1.config.xml

<allow-navigation href="http://*" />

<allow-navigation href="https://*" />

开启外部地址,以后需要做筛选

2.外部地址部署时候需要

新增cordova-js-src文件夹,plugins文件夹,cordova.js,cordova_plugins.js到服务器上,不然手机端cordova是白屏


3.插件问题

ios和android需要分开开发,然后合到一起,但是例如在ios系统里没有装android环境,插件是装不进去,需要删除android,或者配置android

4.Ios有时候平台都创建不了,因为用了不稳定的新版本

5.cordova run android 会覆盖掉build.gradle和AndroidManifest.xml自己添加的信息,插件里的androidmanifest.xml,一种一般只加插件时才用命令,其他情况,android需要独立编译测试。

6.基于正常的cordova工程,Android的fragment里使用cordova

public class DoctorFragment extends BaseFragment {    private Unbinder unbinder;    //    @BindView(R.id.doctor_webview)    SystemWebView webView;    SystemWebViewEngine engine;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        mContentView = inflater.inflate(R.layout.fragment_doctor, container, false);        unbinder = ButterKnife.bind(this, mContentView);        webView = (SystemWebView) mContentView.findViewById(R.id.doctor_webview);        ConfigXmlParser parser = new ConfigXmlParser();        parser.parse(getActivity());        engine = new SystemWebViewEngine(webView);        CordovaWebView cordovaWebView = new CordovaWebViewImpl(engine);        cordovaWebView.init(new CordovaInterfaceImpl(getActivity()), parser.getPluginEntries(), parser.getPreferences());        webView.loadUrl("http://huanghuang.applinzi.com/www/index.html");        return mContentView;    }    @Override    public void onDestroyView() {        unbinder.unbind();        super.onDestroyView();    }}
这里有个很坑, 因为代码中是解析本地的config.xml,如果我使用外部地址,那么config.xml里的content也保持一致才显示。
<content src="http://huanghuang.applinzi.com/www/index.html" />

7.startActivityfroResult的坑

this.cordova.startActivityForResult(cordovaPlugin, intent, REQUEST_CODE_TAKEPHOTO);
第一次可以,第二次就直接返回cancel了,发现在CordovaInterfaceImpl的实现类里

@Overridepublic void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) {    setActivityResultCallback(command);    try {        activity.startActivityForResult(intent, requestCode);    } catch (RuntimeException e) { // E.g.: ActivityNotFoundException        activityResultCallback = null;        throw e;    }}@Overridepublic void setActivityResultCallback(CordovaPlugin plugin) {    // Cancel any previously pending activity.    if (activityResultCallback != null) {        activityResultCallback.onActivityResult(activityResultRequestCode, Activity.RESULT_CANCELED, null);    }    activityResultCallback = plugin;}
每次都需要去设置回调activityResultCallback,如果不等于null,就直接回调取消了。导致无法收到第二次onactivityResult;去掉之后,发现没有用,然后继续跟踪:在CallbackContext里,发现两次的回调后finished由false变为true了,导致无法发送结果。

public void sendPluginResult(PluginResult pluginResult) {    synchronized (this) {        if (finished) {            LOG.w(LOG_TAG, "Attempted to send a second callback for ID: " + callbackId + "\nResult was: " + pluginResult.getMessage());            return;        } else {            finished = !pluginResult.getKeepCallback();        }    }    webView.sendPluginResult(pluginResult, callbackId);}

后面采用下面方式是可以发送,后面又发现进入其他界面无效

PluginResult pluginResult = new PluginResult(PluginResult.Status.OK,GsonParse.toJson(imageInfo));pluginResult.setKeepCallback(true);callbackContext.sendPluginResult(pluginResult);
最后发现自己坑了自己,把图片控件写成了单例,导致每次初始化的时候callbackid都一样,后面每次都是先取消了,不用单例后,一切问题都好了


8.Android手机兼容性问题   远程加载cordova

deviceready has not fired after 5 seconds. cordova.js:1223
Channel not fired: onFileSystemPathsReady cordova.js:1216
Channel not fired: onCordovaInfoReady 


a.尝试腾讯X5内核,一样超时   意味手机内核无效

b.corsswalk  一直未成功加载远程,暂时不知道为什么

c.尝试改变cordova.js加载顺序,

d.本地加载cordova  华为报另外一个错


ReferenceError
  1. message"Promise is not defined"
  2. stack(...)
  3. get stackfunction () { [native code] }
  4. set stackfunction () { [native code] }
  5. __proto__Error

尝试用https://www.npmjs.com/package/es6-promise直接引入,不行

尝试用http://www.ruanyifeng.com/blog/2016/01/babel.html    太麻烦了

http://blog.csdn.net/hsany330/article/details/73200935   还是ES6兼容性问题解决了。


9.



原创粉丝点击