В событии [webView: shouldStartLoadWithRequest: navigationType:] как вы можете определить разницу между iframe, который загружает контент, и всем контентом, загружающим страницу? Похоже, что оба вызывают одно и то же событие с одинаковыми аргументами, единственное различие заключается в том, что URL-адрес будет загружен, поэтому невозможно определить разницу между ними.
Я подумал о нескольких способах увидеть разницу:
- Разобрать исходный код страницы и сохранить список всех атрибутов iframe src, предположим, что если загрузка URL-адреса является одной из тех, что в моем списке, это iframe. Конечно, это предположение может быть неверным, если оно действительно перейдет на страницу.
- То же, что и выше, но запустите JavaScript на странице и получите атрибуты iframe src.
- Используя JavaScript, настраивайте хуки для каждого пользователя, пытающегося перейти на страницу, аналогично http://niw.at/articles/2009/02/06/how-to-enable-the-popup-window-on-uiwebview/en
- Используя JavaScript, настройте хуки непосредственно перед тем, как iframe попытается загрузить данные (не знаю, как бы я это сделал).
- Измените атрибут src каждого iframe, добавив специальную строку в конец его атрибута src, например. "# IFrame-загрузка". Загрузите UIWebView с этим измененным исходным кодом. Хотя это будет работать только для iframes, которые существовали на исходной странице, как это было запрошено в первый раз, но не для тех, которые загружаются динамически, например через JavaScript.
- Дайте странице нормально загрузиться, вернув
YES
в событии [webView: shouldStartLoadWithRequest: navigationType:], и после завершения загрузки проверьте, изменился ли URL-адрес WebView ... перенаправление страницы, если нет, это, вероятно, означает, что это был iframe, который был загружен.
- Используя JavaScript, переопределите установщик свойства window.location, чтобы запустить мой собственный код, прежде чем он фактически изменит местоположение окна. Затем я мог бы связаться с Objective-C, чтобы он знал, что следующая загрузка будет перенаправлением. Это единственный способ перенаправления в JavaScript?
Какой лучший способ сделать это? Можете ли вы придумать способы, о которых я не подумал? Есть ли у iframes специальное событие / свойство, которым я мог бы помочь с помощью JavaScript?
Спасибо
Обновление : это не так просто, как просто проверить навигационный тип. Хотя нажатие на ссылку для открытия новой страницы будет отображаться как navigationType = 0, редирект JavaScript (с изменением window.location) будет отображаться как navigationType = 5. Загрузка iframe также отображается как navigationType = 5. Так что когда navigationType = 5, вы не знаете, изменили ли URL-адреса всей страницы с помощью JavaScript или это просто загрузка iframe на той же странице.