Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.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
将obj-c类传递给javascript不会';不行。我做错了什么?_Javascript_Objective C_Cocoa_Webkit_Webview - Fatal编程技术网

将obj-c类传递给javascript不会';不行。我做错了什么?

将obj-c类传递给javascript不会';不行。我做错了什么?,javascript,objective-c,cocoa,webkit,webview,Javascript,Objective C,Cocoa,Webkit,Webview,我正在用javascript编写一些后端代码,并计划在GUI中使用本机代码。这在安卓系统中运行完全正常,但我在MacOSX上的Cocoa中遇到了一些问题。我遵循了苹果的教程,但它就是不起作用。在你看过代码之后,让我来解释一下 Index.html <html> <head> <script type="text/javascript"> document.addEventListener("DOMContentLoaded", read

我正在用javascript编写一些后端代码,并计划在GUI中使用本机代码。这在安卓系统中运行完全正常,但我在MacOSX上的Cocoa中遇到了一些问题。我遵循了苹果的教程,但它就是不起作用。在你看过代码之后,让我来解释一下

Index.html

<html>
<head>
    <script type="text/javascript">
        document.addEventListener("DOMContentLoaded", ready, false);

        function ready() {
            document.write(returnString());
            bridge.onBackendReady();
        }

        function returnString() {
            return "Hello World!!!!";
        }
    </script>
</head>
<body>

</body>
</html>
后端桥

#import "BackendBridge.h"


@implementation BackendBridge

-(void)onBackendReady
{
NSLog(@"Ready");
}

@end

所以,我想做的很简单。从javascript调用BackendBridge类中的onBackendReady函数。从Apple WebView api和教程中我可以了解到,这应该是正确的方法,但它不起作用(NSLog调用不运行)。我知道javascript函数按预期工作,在我的ui中,我可以看到字符串“Hello World!!!!”…

WebScriptObject.h
中的注释说:

By default, no properties or functions are exported. A class must implement
+isKeyExcludedFromWebScript: and/or +isSelectorExcludedFromWebScript: to 
expose selected properties and methods, respectively, to JavaScript.
也许可以将此添加到
后端桥

+ (BOOL)isSelectorExcludedFromWebScript:(SEL)selector
{
    return selector != @selector(onBackendReady);
}
bridge_on BackendReady()


使用下划线而不是。或者:

您指的是哪个苹果文档?另外,您知道是否调用了
ApplicationIDFinishLaunching:
方法吗?它是下划线而不是:。。。更换。使用u将是非常非常错误的,因为onBackendReady是bridge对象的属性(更准确地说是window.bridge对象),而不是选择器。
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)selector
{
    return selector != @selector(onBackendReady);
}