Хобрук: Ваш путь к мастерству в программировании

WebView Открыть '_blank' ссылки

У меня есть WebView, который загружает контент из Интернета. Если у меня есть ссылка, использующая атрибут _blank, ничего не происходит.

До сих пор я пытался установить своего делегата WebView, но я не могу заставить его зарегистрироваться, я даже не могу вернуть NSLog, поэтому я должен использовать его неправильно. Код выглядит следующим образом:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [tmpView setUIDelegate:self];
}

- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
{
    NSLog(@"HEY THERE");
    return sender;
}

В идеале я бы хотел, чтобы всякий раз, когда нажимается ссылка на WebView, ссылка всегда открывалась в этом WebView, нигде больше.

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

В ходе исследований я нашел другие методы, но понятия не имею, как их использовать для получения желаемого результата:

webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener:

Я в полном тупике, поэтому я был бы очень признателен за вашу помощь.

Заранее спасибо всем.


  • это может помочь: conecode.com/news /2011/05/ 28.04.2012
  • @hanumanDev, это не поможет, потому что это статья об iOS UIWebView, а вопрос касается Mac WebView. 28.04.2012

Ответы:


1

Если вы не хотите открывать новое окно, а просто открываете запрос в своем текущем объекте WebView, вам просто нужно сделать это в своем делегате:

- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
{
    [[sender mainFrame] loadRequest:request];
    return sender;
}
28.04.2012
  • это ИМЕННО то, что я искал, я просто не знаю, как связать делегата? Рисовать ли стрелку от WebView к владельцу файла из FrameLoadDelegate? 28.04.2012
  • причина, по которой я спрашиваю, заключается в том, что на данный момент этот метод, похоже, не выполняется? еще раз спасибо Роб 28.04.2012
  • Этот метод является частью протокола WebUIDelegate, поэтому вам необходимо назначить любой объект, реализующий метод, в качестве UIDelegate протокола WebView. В вашем примере кода вы реализовали его в делегате приложения, поэтому вы должны связать выход UIDelegate объекта WebView с объектом AppDelegate. 28.04.2012
  • В качестве альтернативы, если ваш делегат приложения имеет выход в веб-представление, вы можете вызвать [webView setUIDelegate:self] в applicationDidFinishLaunching:. 28.04.2012
  • ты абсолютный герой, это работает! я пытался сделать это в течение нескольких часов AAAH. Спасибо ! 28.04.2012

  • 2

    В этом сообщении в блоге представлено решение, использующее JavaScript для удаления целевого атрибута из ссылок.

    http://blog.mikeweller.com/2009/06/uiwebview-doesnt-open-targetblank-links.html

    27.04.2012
  • при тестировании в Chrome это действительно удаляет все плохие атрибуты, именно то, что я хочу, однако код, похоже, ничего не делает с моим WebView? Я поместил его в метод WebViewProgressFinished, но ссылки по-прежнему нельзя щелкнуть? 28.04.2012

  • 3

    ты можешь позвонить

    (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
    

    это сработало.

    вы также можете реализовать

    (void)webView:(WebView *)sender decidePolicyForNewWindowAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request newFrameName:(NSString *)frameName decisionListener:(id<WebPolicyDecisionListener>)listener
    

    делать то, чего вы хотите достичь.

    24.01.2013
    Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..