0

Iphoneでは、私は使用する必要があります、

 window.location = 'myscheme://FunctionName?Param1=Value1&.........';

しかし、Androidでは、

Android.FunctionName(params);

これは私のために働きます、

if(window.Android)
    Android.FunctionName(params);
else
    window.location = 'myscheme://FunctionName?Param1=Value1&.........';

しかし、すべての機能に対してこれを行うことは、私にとって苦痛です。これらの詳細を抽象化し、単一の関数を使用して両方を呼び出すことは可能ですか?

4

1 に答える 1

0

これは私にとってはうまくいきますが、それが良いかどうかはわかりません、

var iphoneUrl = 'myScheme://{0}?{1}'
function callNativeFunction(functionName) {
    var args = Array.prototype.slice.call(arguments, 1);
    if (window.andriod) {
        andriod[functionName].apply(andriod, args);
    }
    else {
        var params = '';
        for (var i = 0, len = args.length; i < len; i++) {
            params += 'param' + (i + 1) + '=' + encodeURIComponent(args[i]) + '&';
        }
        params = params.slice(0, -1);// remove last &
        window.location = iphoneUrl.format(functionName, params);
    }
}
callNativeFunction('functionName', 'param1');

これがString.Formatです。

String.prototype.format = function () {
    var args = arguments;
    return this.replace(/{(\d+)}/g, function (match, number) {
        return typeof args[number] != 'undefined'
          ? args[number]
          : match
        ;
    });
};
于 2013-01-07T10:49:54.807 に答える