Cocoa webview UserAgent "webkit-legacy" проблема
Я решил это. Посмотрите на выбранный ниже ответ!
Я боролся, чтобы найти, что приводит к тому, что приложение WebView OSX Cocoa действует иначе, чем Safari. Оказывается, пользователь-агент отличается (вроде очевидным?), И веб-сайт, который я посещаю, не знает, как с этим справиться.
Удивительно, что https://messenger.com (facebook chat).
Проблема заключается в том, что она не отображает изображение на экране. Он загружается, но на самом деле он не отображается. Взгляните на это.
![Снимок экрана с тестовым приложением]()
Если вы посмотрите на область, которую я обозначил как "2", вы просто видите пустое пространство. Я не подвергал этому цензуре. Он просто пуст.
Итак, здесь моя оригинальная ссылка вопроса: Простая Swift Cocoa приложение с WebKit: Загрузка изображения не работает
Я решил первый выпуск (спасибо ответам: D), но второй вопрос не устраняется.
- Общее изображение не отображается - я помечен как 2 на картинке.
- снова, из других браузеров или выпущенных приложений, он показывает фотографии, которые я поделился с участниками, как показано ниже. (конечно, я подвергал цензуре фотографии)
![пример браузера, показывающий общие фотографии]()
Чтобы отладить это, я открыл элемент Inspect Element и нашел это.
<body class=" webkit-legacy webkit mac x1 body_textalign Locale_en_US _z4_" dir="ltr">
Когда я загрузил ту же самую страницу из Safari, я бы увидел следующее:
<body class="safari webkit mac x1 body_textalign Locale_en_US _z4_" dir="ltr">
Итак, я решил заменить эту строку из WebView моего приложения и альт! оно работает! так что...
TL;DR: Как я могу выполнять эту работу каждый раз при загрузке представления?
Я попытался найти некоторые методы для настройки моего пользовательского агента в Safari, но я не могу заставить это работать. Любое предложение пожалуйста?
Ответы
Ответ 1
Как и было обещано, вот ответ.
Я добавил эту функцию в класс ViewController
.
func webView(sender: WebView!, didFinishLoadForFrame frame: WebFrame!) {
webView.stringByEvaluatingJavaScriptFromString("document.body.className = 'safari webkit mac x1 Locale_en_US _z4_';")
}
Довольно просто, но он отлично работает.
У меня все еще есть проблемы с самим приложением (например, кнопка "Загрузить изображение не запускает диалог проводника файлов" ), но основные функции, такие как
- отправлять/получать сообщения
- просмотр общих изображений
работает нормально.
Я планирую работать над этим для
- скачать изображение
- Уведомление
Если вы заинтересованы в том, чтобы помочь мне, прокомментируйте!
Спасибо всем за вашу помощь:)
Ответ 2
Я создал простую прикладную программу и исправил эту проблему. Я предоставил тот же пользовательский агент, что и в Safari. После этого совлокальные фотографии работают так, как ожидалось.
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
self.webView.customUserAgent = @"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7";
self.webView.mainFrameURL = @"https://messenger.com";
}
После этого я сравниваю пользовательские агенты:
Оригинальный пользовательский агент WebView: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko)
Пользовательский агент Safari: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7
Итак, похоже, мне нужно изменить только последнюю часть User Agent. Например:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
self.webView.applicationNameForUserAgent = @"Safari/601.2.7";
self.webView.mainFrameURL = @"https://messenger.com";
}
С помощью этого кода также работают общие фотографии. К сожалению, он не работает с другими значениями applicationNameForUserAgent
, которые я пробовал.