• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Why the Cocoa function can't be called from JavaScript?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Why the Cocoa function can't be called from JavaScript?


  • Subject: Why the Cocoa function can't be called from JavaScript?
  • From: ziqian zhan <email@hidden>
  • Date: Mon, 14 Sep 2009 11:41:17 +0800

Hi all,
I'm a newbie of JavaScript. Now I want to call Cooca function from
JavaScript. Below is the code:

//testcontroller.h

#import <Cocoa/Cocoa.h>
#import <WebKit/WebKit.h>
@interface TestController : NSWindowController {
IBOutlet NSButton * button;
IBOutlet WebView * webView;
}
-(IBAction)loadPage:(id)sender;
-(NSString*)getName;
@end

//testcontroller.m
#import "TestController.h"
@implementation TestController
-(void)awakeFromNib
{
[[webView windowScriptObject] setValue:self forKey:@"JSBridge"];
NSString * path = [[NSBundle mainBundle] pathForResource:@"welcome" ofType:@
"html"];
[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL
fileURLWithPath:path]]];
}
-(NSString*)getName
{
return @"hi I'm here.";
}
-(IBAction)loadPage:(id)sender
{
NSString * path = [[NSBundle mainBundle] pathForResource:@"welcome" ofType:@
"html"];
[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL
fileURLWithPath:path]]];
}
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector { return NO; }
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name { return NO; }
@end

//welcome.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Welcome</title>
<style type="text/css">
body {background-color:lightgray;}
</style>
<script language="javascript" type="text/javascript">
function changeIt()
{
var h2s = document.getElementsByTagName("h2");
name = JSBridge.getName();
h2s[0].firstChild.nodeValue = name;
}
</script>
</head>
<body>
<h2 align="center">hello world!</h2>
<input type="button" value="change it" onclick="changeIt();"/>
</body>
</html>

When first time welcome.html is loaded into webView from
-(void)awakeFromNib;, push the "change it" button on web page the
-(NSString*)getName function is called. The "hello world" is replaced with
"hi I'm here.". But when welcome.html loaded again from
-(IBAction)loadPage:(id)sender, push the "change it" button on web page but
NOTHING happens. The "hello world" is no way changed to "hi I'm here.". It
looks that the JSBridge.getName() disappeared.

Could someone explain to me why this happened when the second time
welcome.html loaded? How can I fix this and let the -(NSString*)getName;
function get called again? Any help is appreciated.

--
What's happening?
_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Why the Cocoa function can't be called from JavaScript?
      • From: Rob Keniger <email@hidden>
  • Prev by Date: NSPopUpButton breaks in Snow Leopard
  • Next by Date: Need Help : Iphone Dynamic behavior Tab Controller!
  • Previous by thread: [SOLVED] NSPopUpButton breaks in Snow Leopard
  • Next by thread: Re: Why the Cocoa function can't be called from JavaScript?
  • Index(es):
    • Date
    • Thread