Установка UIDelegate для UIWebView - PullRequest
       13

Установка UIDelegate для UIWebView

1 голос
/ 10 января 2012

Я где-то читал, чтобы прочитать сообщения консоли javascript, используя метод делегата

- (void)webView:(WebView *)webView addMessageToConsole:(NSDictionary *)message

из UIDelegate.Но как / где мне нужно установить делегата WebView (не UIWebView) для моего пользовательского делегата?

Я знаю, что Apple не позволяет этого в AppStore, но я просто хочу реализовать это дляцели отладки.

Что я пробовал до сих пор:

- (void)webView:(id)sender didClearWindowObject:(id)windowObject forFrame:(WebFrame*)frame
{
    [webView setUIDelegate:[[MyCustomUIDelegate alloc] init]];
}

и

-(void) webView:(id)webView windowScriptObjectAvailable:(id)newWindowScriptObject 
{    
    [webView setUIDelegate:[[MyCustomUIDelegate alloc] init]];
}

1 Ответ

4 голосов
/ 19 января 2012

Эта публикация может помочь вам:

Как мой код iPhone Objective-C может получать уведомления об ошибках Javascript в UIWebView?

Вы можете подключить элемент управления UIWebView кскрытый фреймворк WebKit и получение всех исключений, выполняемых функций и т. п.

Другой способ - , опубликованный здесь : вставка кода JavaScript в ответ, который вызывает функцию objecie-c.

NSString* path = [[NSBundle mainBundle] pathForResource:@"script" 
                                                 ofType:@"js"];
NSString* content = [NSString stringWithContentsOfFile:path
                                              encoding:NSUTF8StringEncoding
                                                 error:NULL];

[sender stringByEvaluatingJavaScriptFromString:content];

Например, код JavaScript может выглядеть следующим образом:

console = new Object();
console.log = function(log) {
    var iframe = document.createElement("IFRAME");
    iframe.setAttribute("src", "ios-log:#iOS#" + log);
    document.documentElement.appendChild(iframe);
    iframe.parentNode.removeChild(iframe);
    iframe = null;    
}
console.debug = console.log;
console.info = console.log;
console.warn = console.log;
console.error = console.log;

, а код объективного c:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSString *requestString = [[[request URL] absoluteString] stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
    //NSLog(requestString);

    NSLog(@"Request: %@", requestString);

    if ([requestString hasPrefix:@"ios-log:"]) {
        NSString* logString = [[requestString componentsSeparatedByString:@":#iOS#"] objectAtIndex:1];
        NSLog(@"UIWebView console: %@", logString);
        return NO;
    }

    return YES;
}
...