【问题标题】:ios - How to invoke javascript in ios?ios - 如何在 ios 中调用 javascript?
【发布时间】:2013-04-22 22:55:19
【问题描述】:

我想在登录 Gmail 或 Yahoo 后检查 JSON URL,但条件失败,我正在尝试以下代码。

如何声明javascript,我声明的方式正确吗?

我正在关注这个链接,请通过它http://www.stevesaxon.me/posts/2011/window-external-notify-in-ios-uiwebview/

- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
 navigationType:(UIWebViewNavigationType)navigationType

{   
    //_url = [[NSURL alloc] initWithString:websiteUrl];
    _url = [[NSURL alloc] initWithString:@"JSON URL"];
    if(_url)
    {

        if([_url isEqual:[request URL]])
        {
            return YES;
        }

        [_url release];
    }

    _url = [[request URL] retain];
    NSString* scheme = [_url scheme];

    //Condition fails here after logged in

    if([scheme isEqualToString:@"acs"])
    {
        // parse the JSON URL parameter into a dictionary
        NSDictionary* pairs = [self parsePairs:[_url absoluteString]];
        if(pairs)
        {
            WACloudAccessToken* accessToken;
            accessToken = [[WACloudAccessToken alloc] initWithDictionary:pairs];
            [WACloudAccessControlClient setToken:accessToken];

            [self dismissModalViewControllerAnimated:YES];
        }

        return NO;
    }

    [NSURLConnection connectionWithRequest:request delegate:self];

    return NO;

}



- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{
    if(_data)
    {
        NSString* content = [[NSString alloc] initWithData:_data
                                                  encoding:NSUTF8StringEncoding];

        [_data release];
        _data = nil;

        NSString *jsString = @"window.external =\
        {\
        'Notify': function(s) { document.location = 'acs://settoken?token=' + s; },\
        'notify': function(s) { document.location = 'acs://settoken?token=' + s; }\
        }";

        content = [jsString stringByAppendingString:content];

        //NSURL *url = [[NSURL alloc] initWithString:websiteUrl];
        NSURL *url = [[NSURL alloc] initWithString:@"JSON URL"];
        [webView loadHTMLString:content baseURL:url];
    }

}

【问题讨论】:

  • 我并没有真正得到第一个块开头的 {{ _url = [[NSURL alloc] initWithString:@"JSON URL"];}} 部分。你为什么把它分配在那里?
  • 这是在 Windows Azure 中注册的 URL,对不起,我无权共享该 URL,所以我只给出了“JSON URL”

标签: ios objective-c access-token


【解决方案1】:
        NSString *jsString = @"window.external =\
        {\
        'Notify': function(s) { document.location = 'acs://settoken?token=' + s; },\
        'notify': function(s) { document.location = 'acs://settoken?token=' + s; }\
        }";

应该是:

        NSString *jsString = @"<script type='text/javascript'>\
        window.external =\
        {\
        'Notify': function(s) { document.location = 'acs://settoken?token=' + s; },\
        'notify': function(s) { document.location = 'acs://settoken?token=' + s; }\
        }\
        </script>";

顺便说一句,粗略的一瞥表明您的内存管理存在一些问题(_url 正在泄漏,content 正在泄漏)。如果您不确定如何处理手动内存管理,我强烈建议您打开 ARC(自动引用计数)。

【讨论】:

  • 非常感谢 MarOux 的宝贵回复
猜你喜欢
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
  • 1970-01-01
  • 2020-07-25
  • 2015-02-09
相关资源
最近更新 更多