Если вы хотите продублировать Safari «угадывание протокола» или даже «угадывание TLD», вам придется реализовать это самостоятельно.
С точки зрения пользователя, вам обычно не нужно вводить протокол в веб-браузер, поскольку можно предположить, что протокол "HTTP". С точки зрения разработчика, вам нужно будет указать протокол при формировании URL.
Поскольку вы пометили этот вопрос "webkit", я предполагаю, что вы работаете с WebView. Из документации на -[WebView setMainFrameURL:]
:
Этот метод функционально эквивалентен
для вызова [[webView mainFrame]
loadRequest: [NSURLRequest
requestWithURL: [NSURL
URLWithString: URLString]]]
.
Обратите внимание, метод с плохим именем -setMainFrameURL: принимает NSString, а не NSURL, как вы ожидаете. Поэтому, учитывая это, вы все равно должны предоставить действительную строку URL-адреса, чтобы получить действительный URL-адрес.
В случае, который вы упомянули в комментарии, важно отметить, что http://example.com
так же действителен, как и http://www.example.com
. Это обрабатывается сервером имен целевого домена и не имеет никакого отношения к тому, является ли URL действительным или нет. Это связано с тем, что example.com
, вероятно, по-прежнему разрешается на фактический хост (то есть запись для домена без хоста перенаправляется на www
). Некоторые домены этого не делают, поэтому вы можете обрабатывать этот случай (неверное имя хоста) отдельно, пытаясь добавить www
, если он отсутствует. Важно то, что действительный URL не является действительным доменом.
Учитывая все вышесказанное, вам придется выкрутить свое собственное "угадающее" решение.