Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Cocoa WebView:无法使用`callWebScriptMethod:`_Javascript_Objective C_Cocoa_Webview - Fatal编程技术网

Javascript Cocoa WebView:无法使用`callWebScriptMethod:`

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); } } }

我正在将页面加载到Web视图中。页面上有一个小测试Javascript:

<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”方法。方法是:

  • 从窗口对象获取bdu对象:

    WebScriptObject*bdu=[[webview1 windowScriptObject]valueForKey:@“bdu”]

  • 调用bdu对象上的“secondTest”方法:

    [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]];