Возможно открытие всплывающих ссылок в UIWebView?

У меня есть UIWebView, который я использую как встроенный браузер в своем приложении.

Я заметил, что ссылки на веб-страницах, открывающие новые windows, игнорируются без какого-либо вызова моего кода.

Я пробовал точку останова на

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

а затем выберите ссылку, которая откроет всплывающее окно, и точка останова никогда не будет удалена. Есть ли что-нибудь, что я могу сделать, чтобы перехватить этот выбор всплывающей ссылки и получить URL-адрес и просто загрузить его в обычном режиме?

Мне не интересно отображать всплывающее окно в самом приложении, я просто хочу, чтобы URL-адрес того, что будет загружаться во всплывающем окне, загрузится в основной веб-просмотр.

Это возможно?

Благодаря!

Я столкнулся с этим, и переписывание HTML было лучшим решением, с которым я мог бы придумать. Самая большая проблема, с которой я столкнулся с этим подходом, заключается в том, что веб-браузер интерактивен на пару секунд, пока не будет вызван метод webViewDidFinishLoad: поэтому ссылки, похоже, будут разбиты на несколько секунд, пока они не будут перезаписаны.

Есть три области, которые я переписал: ссылки, сообщения формы и вызовы window.open ().

Я использовал аналогичный подход к первому коду, который был отрезан в ответе Джасариана, чтобы переписать цель для ссылок и форм путем повторения тегов и форм. Чтобы переопределить window.open, я использовал код, похожий на следующий:

 var oldWindowOpen = window.open; window.open = function(url, sName, sFeatures, bReplace) { oldWindowOpen(url, '_self'); }; 

Поэтому после небольшого количества исследований ясно, что class UIWebView целенаправленно игнорирует ссылки, которые будут открываться в новом окне (либо с помощью «целевого» элемента в теге, либо с помощью javascript в событии onClick).

Единственные решения, которые я нашел, – это манипулировать html страницы с помощью javascript. Хотя это работает в некоторых случаях, это не пуленепробиваемый. Вот некоторые примеры:

 links = document.getElementsByTagName('a'); for (i=0; i 

Это изменит все ссылки, которые используют элемент «target», чтобы указать на _self, вместо _blank или _new. Это, вероятно, будет работать по всем направлениям и не представляет никаких проблем.

Другой fragment, который я нашел, следовал той же идее, но с событием onClick:

 links = document.getElementsByTagName('a'); for (i=0; i 

Это просто противно. Он будет работать только в том случае, если в теге link правильно установлен элемент href, и только если событие onclick используется для открытия нового windows (с помощью window.open () или чего-то подобного). Причины, по которым это неприятно, не должны объяснять, но один пример мог бы быть, если onClick используется для чего-либо, кроме открытия windows, что является очень распространенным случаем.

Я предполагаю, что можно пойти дальше с этим и начать выполнять некоторую строку, соответствующую методу onClick, и проверить window.open (), но опять же, это действительно далеко не идеально.

Вот как я получаю ссылки на Twitter (т. Е. Ссылку на страницы, которые пытаются открыть с новыми windowsми):

 -(BOOL)webView:(UIWebView *)mainWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if (navigationType == UIWebViewNavigationTypeLinkClicked) { //Allows for twitter links [self.mainWebView loadRequest:request]; return NO; } return YES; } 
  WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init]; theConfiguration.preferences.javaScriptCanOpenWindowsAutomatically = YES; webView1 = [[WKWebView alloc] initWithFrame:self.webView.frame configuration:theConfiguration]; webView1.navigationDelegate = self; webView1.UIDelegate = self; [self.view addSubview:webView1]; NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { NSString *htmlString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"htmlString: %@", htmlString); [webView1 loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"your url"]; }]; [dataTask resume]; 
  • XCode 4 зависает при «Присоединении к (имя приложения)»
  • Как анализировать длительность ISO-8601 в Objective C?
  • Как создать одноэлементный class в объекте C
  • как отобразить тестовый баннер IAd в симуляторе
  • как сделать программный снимок экрана для iPhone?
  • В чем разница между «отображаемым именем пакета» и «именем пакета» в информационном plist приложения cocoa
  • NSDateFormatter dateFromString возвращает nil
  • Как использовать CaptiveNetwork для получения текущего имени точки доступа Wi-Fi
  • Могу ли я передать блок как @selector с Objective-C?
  • Изменение позиции UIBarButtonItem в UINavigationBar
  • Как я могу перебирать все подпункты UIView, а также их подзоны и их подпрограммы
  • Interesting Posts

    Как преобразовать строку в верхний или нижний регистр с помощью XSLT?

    Как вы имитируете Mouse Click на C #?

    JSP: тег JSTL

    Используйте обе таблицы учетных записей и пользователей с помощью программы «Разработка»

    Распаковка сенсорной панели ноутбука для очистки ключей

    Как я могу остановить удаленный компьютер от изменения раскладки клавиатуры?

    Как мне перейти на Windows 10, если у меня меньше 8 ГБ бесплатно?

    Как программно запускать щелчок по ссылке Используя jquery?

    Как безопасно хранить ключи шифрования в java?

    Удаленное закрытие открытых общих файлов

    Какой самый быстрый алгоритм для нахождения простых чисел?

    Как использовать динамическую схему весенних данных с помощью mongodb?

    Масштабировать пользовательский интерфейс для нескольких разрешений / различных устройств

    MATLAB: как отображать текст в кодировке UTF-8, считанный из файла?

    Брандмауэр Android с VpnService

    Давайте будем гением компьютера.