Загрузка пользовательской схемы URL на iPhone из Javascript? - PullRequest
1 голос
/ 22 апреля 2011

У меня есть приложение, которое использует stringByEvaluatingJavaScriptFromString для изменения HTML, к которому у меня нет доступа (например, Greasemonkey).В частности, я хочу сохранить имя пользователя и пароль из формы входа в NSUserDefaults, когда событие onSubmit запускается из JS.

У меня уже есть пользовательская схема URL и обработчик onSubmit.Я могу передать URL имя пользователя и пароль, и он сохранит его.У меня только проблемы с обработчиком onSubmit: как я могу сохранить данные с моим пользовательским URL-адресом перед отправкой формы?

Я не , использующий какие-либо фреймворки Javascript, и только мой кодпредназначается для Мобильного Сафари.

1 Ответ

1 голос
/ 22 апреля 2011

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

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if ([[[request URL] absoluteString] hasPrefix:@"https://www.thirdpartysite.com/theirLoginScript"]) {
        NSString *username = [self parseUsernameFromRequest:request];
        NSString *password = [self parsePasswordFromRequest:request];
        [self saveUsername:username andPassword:password];
    }
    return YES;
}

Я оставил реализации parseUsernameFromRequest:, parsePasswordFromRequest: и saveUsername:andPassword: для вашего воображения.

(Подсказка: если форма использует метод GET, вы можете получить ее параметры, используя [[request URL] parameterString]. Если форма использует метод POST, вы можете использовать [[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding].)

Кстати, вы никогда не должны хранить конфиденциальную информацию, такую ​​как пароли, в NSUserDefaults.Apple предоставляет Keychain Services для безопасного хранения информации такого типа.К сожалению, работа со Службами Цепочки для ключей на удивление сложна, поэтому вы можете попробовать Простой Код Брелка для iPhone Базз Андерсена .

...