• 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
Calling javascript from Cocoa 'facelessly'
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Calling javascript from Cocoa 'facelessly'


  • Subject: Calling javascript from Cocoa 'facelessly'
  • From: Geoffrey Holden <email@hidden>
  • Date: Wed, 30 Jun 2010 18:01:01 +0100

My company has a webpage (internal, sadly, so I can't let you have a link to look at) which is entirely driven by Javascript, and which requires authentication to access (the authentication too is driven by Javascript, rather than by the more normal https sign in methods).

The website is a) ugly as hell, b) not very flexible and c) won't format correctly on the screen of an iPhone.  The first issue is aesthetic, the second is a serious issue and the third could well be a problem in the future.

The obvious answer would be 'change the site', but that isn't very practical sadly - political issue, don'tchaknow!  I'm working hard to increase uptake of Apple equipment at work, and if I can encapsulate the website as a friendly app on the Mac that could be a major driver.  This is just a project that I'm kicking around out of hours for the love of it and in the hope that Macs might end up being a preferred solution!

Initially, I just want to produce a proof of concept which runs at the command line (the connection will be implemented as a faceless plug in) and I don't want a webview in the UI.  So, that said, I cobbled together the following test:

    //for header
    IBOutlet WebView * webView;
    NSDictionary* pluginPrefs;


    //for body
    NSString* preferencesFile = [NSHomeDirectory() stringByAppendingPathComponent:@"/Desktop/Prefs.plist"];

    pluginPrefs = [[NSDictionary alloc] initWithContentsOfFile:preferencesFile];


    WebFrame *mainFrame = [webView mainFrame];
    NSURL *url = [NSURL URLWithString:[pluginPrefs objectForKey:@"ServerURL"]];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [mainFrame loadRequest:request];

    id win = [webView windowScriptObject];

    NSArray *args = [NSArray arrayWithObjects:
                     @"signIn",
                     [pluginPrefs objectForKey:@"Username"],
                     [pluginPrefs objectForKey:@"Password"],
                     nil];


    //login (in theory!)
    NSLog(@"Parameters: %@, %@",[pluginPrefs objectForKey:@"Username"],[pluginPrefs objectForKey:@"Password"]);
    id result = [win callWebScriptMethod:@"muc.userAuth" withArguments:args];
    if(![result isMemberOfClass:[WebUndefined class]])
        NSLog(@"%@", result);
    else
        NSLog(@"Unable to initialize connection");

The code builds correctly, and runs - but, just for starters, the result seems to be wrong (it should return 'Unable to initialize connection' as far as I can tell), because it always returns the same result whether I have a 'valid' javascript function or not.  Of course, once (if!) I get it to connect correctly, I then need to solve the problem of capturing the stream of messages that will be received in not-quite-real-time. I'll cross that bridge when I come to it.

The muc.userAuth function can be found in and external .js file, referenced in the page html with the following tag:
<script type="text/javascript" src="../js/ejc.js?ver=2.0.1.1"></script>

I realize that this is a hell of a big query, and I'm not entirely sure that I've given enough information for anyone to help answer it.  At the very least, I guess I'm hoping for a reference to some really solid documentation on how to do what I'm trying to do - the documentation on ADC seems to be a little light in this area.

Thanks, and regards,

Geoff_______________________________________________

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: Calling javascript from Cocoa 'facelessly'
      • From: Michael Ash <email@hidden>
  • Prev by Date: Re: Best way to compare CGFloats (Rick B.)
  • Next by Date: Re: Tracking multiple NSURLConnections
  • Previous by thread: Re: Best way to compare CGFloats (Rick B.)
  • Next by thread: Re: Calling javascript from Cocoa 'facelessly'
  • Index(es):
    • Date
    • Thread