我正在使用以下代码,
var iphoneUrl = 'myScheme://{0}?{1}'
function callNativeFunction(functionName) {
var args = Array.prototype.slice.call(arguments, 1);
if (window.andriod) {
andriod[functionName].apply(this, 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
;
});
};
哪个很好但是在andriod webview上适用不起作用。
alert(andriod[functionName])
给我'function myFunc(..){[native Code]}'
。但是andriod[functionName]
不会调用该函数。否如果使用andriod.myFunc
,那么它可以工作,但是我不希望函数被硬编码。 最佳答案
您正在传递this
作为要应用的第一个参数,但是由于the value of this
is dependent on the way you call the function,它只会反映全局对象,而应该反映andriod
(sic)对象。
只需将以下行中的this
替换为andriod
应该可以:
andriod[functionName].apply(this, args);
进入
andriod[functionName].apply(andriod, args);
将
andriod
校正为android
具有以下功能:var iphoneUrl = 'myScheme://{0}?{1}'
function callNativeFunction(functionName) {
var args = Array.prototype.slice.call(arguments, 1);
if ('android' in window) {
window.android[functionName].apply(window.android, 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');
关于javascript - Javascript Apply功能在Android WebView上不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14231463/