![](/img/trans.png)
[英]Android webview javascript function not working for anchor tag
[英]Javascript apply function is not working on Android WebView?
我正在使用以下代碼,
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
如果使用andriod.myFunc
可以正常工作,但我不希望該函數進行硬編碼。
您將this
作為要應用的第一個參數傳遞,但是由於this
的值取決於調用函數的方式 ,因此它將僅反映全局對象,而應反映andriod
(原文如此)對象。
只需更換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');
我發現這是可以解決的,不好但是可以,
function apply(obj, methodName, args) {
switch (args.length) {
case 0: return obj[methodName]();
case 1: return obj[methodName](args[0]);
case 2: return obj[methodName](args[0], args[1]);
case 3: return obj[methodName](args[0], args[1], args[2]);
case 4: return obj[methodName](args[0], args[1], args[2], args[3]);
case 5: return obj[methodName](args[0], args[1], args[2], args[3], args[4]);
case 6: return obj[methodName](args[0], args[1], args[2], args[3], args[4], args[5]);
case 7: return obj[methodName](args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
}
}
function callNativeFunction(functionName) {
var args = Array.prototype.slice.call(arguments, 1);
if (window.android) {
apply(android, functionName, 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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.