简体   繁体   English

Objective-C / Cocoa windowScriptObject命令无法从加载的页面中运行

[英]Objective-C/Cocoa windowScriptObject commands not working from loaded page

I am trying to get a 'windowScriptObject' working, this is my Objective-C code below: 我试图让'windowScriptObject'工作,这是我的Objective-C代码如下:

- (void)consoleLog:(NSString *)aMessage {
    NSLog(@"JSLog: %@", aMessage); }

+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector {
    if (aSelector == @selector(consoleLog:)) {
        return NO;
    }

    return YES; }

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame {

    NSLog(@"Did finnish load...");
    scriptObject = [sender windowScriptObject];

    //obviously, this returns undefined
    NSLog(@"Object: %@",[scriptObject evaluateWebScript:@"MyApp"]);

    //set the value of MyApp
    [scriptObject setValue:self forKey:@"MyApp"];

    //this now returns the value
    NSLog(@"Object: %@",[scriptObject evaluateWebScript:@"MyApp"]);




    //this command now works from here
    [scriptObject evaluateWebScript:@"MyApp.consoleLog_('Test');"]; 
}

The above code works when I inject JavaScript ( evaluateWebScript ) 注入JavaScript时,上面的代码有效( evaluateWebScript

This sis what the console out put is: 这是控制台输出的内容:

2012-12-06 08:03:05.605 BetterDesktop[8669:303] Did finnish load...
2012-12-06 08:03:05.605 BetterDesktop[8669:303] Object: undefined
2012-12-06 08:03:05.606 BetterDesktop[8669:303] Object: <WidgetsDelegate: 0x10133de60>
2012-12-06 08:03:05.607 BetterDesktop[8669:303] JSLog: Test

The command works, however when I use a page it doesn't work. 该命令有效,但是当我使用页面时它不起作用。

<html>
<head>
<script type="text/javascript">
if (typeof(MyApp) != "undefined"){
document.write('<br/><h1>hi</h1>');
MyApp.consoleLog_('Test from HTML');
}
else{

document.write('<br/><h1>Not Defined</h1>');
}

</script>
</head>
<body>
</body>
</html>

It believes that 'MyApp' is undefined, any suggestions? 它认为“MyApp”未定义,有什么建议吗?

(By the way, the WebView is not connected to this class, it is just the delegate) (顺便说一句,WebView没有连接到这个类,它只是委托)

You should inject your objects in to the WebView from within the -webView:didClearWindowObject:forFrame: WebFrameLoadDelegate method rather than within -webView:didFinishLoadForFrame: . 您应该从-webView:didClearWindowObject:forFrame: WebFrameLoadDelegate方法而不是-webView:didFinishLoadForFrame:对象注入WebView。 The window object is not guaranteed to have been correctly initialized until didClearWindowObject is called. 在调用didClearWindowObject之前,不保证window对象已正确初始化。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM