Как я могу иметь несколько экземпляров webkit без совместного использования файлов cookie?
У меня есть приложение, которое создает пару экземпляров WebView, и я хотел бы, чтобы они работали как можно более независимо.
По крайней мере, я не хочу, чтобы они делили куки. Быстрый поиск в Google дал мне результаты, понравившиеся "вы не можете". Я надеюсь, что у кого-то есть лучший ответ.
Ответы
Ответ 1
Основной ответ: "вы не можете".
Посмотрев на это немного, я думаю, что это возможно, но чрезвычайно сложно. Это будет связано с внедрением resourceLoadDelegate в вашем WebView, который реализует -webView:resource:willSendRequest:redirectResponse:fromDataSource:
и изменяет запрос на выключение HTTPShouldHandleCookies
и добавляет к нему соответствующие файлы cookie. Он также должен реализовать -webView:resource:didReceiveResponse:fromDataSource:
, чтобы узнать о любых файлах cookie, возвращаемых с сервера. Вы можете выделить/запустить свою собственную копию NSHTTPCookieStorage
per-webview и использовать ее для хранения/получения файлов cookie.
Ответ 2
Этот пост подводит итог тому, что вы могли бы сделать. Я не уверен, насколько это возможно для вас, и я считаю, что это будет непростая задача, может быть, даже рискованная, но, похоже, это возможно: автор утверждает, что iCab делает это таким образом.
Я тоже надеялся на более простое решение. Конечно, поскольку Webkit является открытым исходным кодом, вы можете просто запустить свою собственную версию фреймворка с измененным поведением, я думаю?
Ответ 3
Я бы предположил, что файлы cookie будут настроены на уровне службы/приложения, а не для отдельных экземпляров или процессов. Возможно, вы можете пересмотреть свой вопрос, чтобы найти способ решить проблему, с которой вы сталкиваетесь, что требует, чтобы экземпляры не передавали файлы cookie.
Какова мотивация не использовать файлы cookie между экземплярами?
Если вам просто нужно 3 просмотра на одном и том же веб-ресурсе, вы можете настроить некоторые виртуальные хосты, которые указывают на тот же источник данных.
Ответ 4
Что вы можете сделать, это посмотреть libcurl, который может обрабатывать хранилища cookie, которые не смешиваются с системой загрузки URL для хранения тех файлов, которые вы хотите разделить. Для меня это кажется правильным и простым решением. Если вам действительно нужно зависеть от webview/webkit, это может быть не так.