Javascript Cocoa WebView:无法使用`callWebScriptMethod:`
我正在将页面加载到Web视图中。页面上有一个小测试Javascript:Javascript Cocoa WebView:无法使用`callWebScriptMethod:`,javascript,objective-c,cocoa,webview,Javascript,Objective C,Cocoa,Webview,我正在将页面加载到Web视图中。页面上有一个小测试Javascript: <script type="text/javascript"> function test(parametr) { $('#testspan').html(parametr); } var bdu = (function(){ return { secondtest: function(parametr) { $('#testspan').html(parametr); } } }
<script type="text/javascript">
function test(parametr)
{
$('#testspan').html(parametr);
}
var bdu = (function(){
return {
secondtest: function(parametr) {
$('#testspan').html(parametr);
}
}
})();
</script>
这是行不通的:
[[webview1 windowScriptObject] callWebScriptMethod:@"bdu.secondtest" withArguments:arguments];
什么会导致此问题?如何解决
谢谢
callWebscriptMethod:(NSString*)带参数的名称:(NSArray*)参数:
不会将name
作为Javascript表达式进行计算。因此它无法解析bdu.secondtest
:它不会先查找bdu
,然后在其中获取条目secondtest
相反,只需使用evaluateWebScript:
“CallWebScript方法”是指在给定的webscript(即javascript)对象上调用给定的方法。在第二行中,您希望对名为“bdu”的javascript对象调用“secondTest”方法。方法是:
WebScriptObject*bdu=[[webview1 windowScriptObject]valueForKey:@“bdu”]代码>
[bdu CallWebScript方法:@“secondtest”带参数:参数]代码>
我在Cordova MacOSX为此挣扎了一段时间,以下是我找到的并对我有效的解决方案: JavaScript:
CordovaBridgeUtil.isObject = function(obj) { return obj.constructor == Object; };
目标C:
WebScriptObject* bridgeUtil = [win evaluateWebScript:@"CordovaBridgeUtil"];
NSNumber* result = [bridgeUtil callWebScriptMethod:@"isObject" withArguments:[NSArray arrayWithObject:item]];
我将把它作为注释而不是答案发布:我对Javascript了解不多,但看起来secondTest函数嵌入了一个块中,而这个块本身就在函数调用中。我不知道脚本外部的任何东西如何将其解析为可调用函数。(如果这在Javascript中能起作用,那么该语言将比我想象的更糟。)我将从其嵌入中删除该函数,看看它是否能起作用。如果是这样,那么嵌入是错误的。
WebScriptObject* bridgeUtil = [win evaluateWebScript:@"CordovaBridgeUtil"];
NSNumber* result = [bridgeUtil callWebScriptMethod:@"isObject" withArguments:[NSArray arrayWithObject:item]];