2010-01-20 3 views
12

При вложении WebView в приложение и загрузке html-страниц в нем, JavaScripts alert()/confirm()/etc. не работает.Предупреждение JavaScript() не работает во встроенном WebView

Оглядевшись в документации, нет соответствующих настроек в WebPreferences - единственная вещь, которая выглядит родственный являются WebUIDelegate s -(void)webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame: и т.д ... но реализация этих будет означать написание пользовательских диалогов эти, кажется довольно излишним ...
Мне не нужен пользовательский WebUIDelegate и хотел бы продолжить использовать только по умолчанию.

Несомненно, должен быть какой-то способ просто включить alert() и др., Но как?

+0

В документации по этому методу делегата говорится: «Никаких действий не предпринимается, если вы не реализуете этот метод», поэтому кажется, что вы ответили на свой вопрос. – smorgan

+0

Я интерпретирую это как * «Никаких действий не предпринимается, если вы устанавливаете пользовательский WebUIDelegate, который не реализует этот метод» * - в идеале я даже не хочу устанавливать свой собственный «WebUIDelegate». –

ответ

5

Оказалось, что нет по умолчанию WebUIDelegate set - Apple, кажется, ожидает, что каждый сможет реализовать те же основные функции для себя.

+2

Но js 'prompt' работает. Так что это немного непоследовательно. –

12

Вот пример кода, который будет выполнять основную работу. Однако вам нужно убедиться, что этот объект зарегистрирован как UIDelegate для WebView.

- (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame { 
    NSAlert *alert = [[NSAlert alloc] init]; 
    [alert addButtonWithTitle:@"OK"]; 
    [alert setMessageText:message]; 
    [alert runModal]; 
    [alert release]; 
} 
+0

«Вам нужно, однако, убедиться, что этот объект зарегистрирован как UIDelegate для WebView». Этот небольшой рекламный ролик спас мой вечер. Благодарю. – byron

Смежные вопросы