(iOS) Запускать букмарклеты в UIWebView? - PullRequest
2 голосов
/ 01 апреля 2012

Я пытаюсь добавить совместимость Readability (стороннее приложение) с моим веб-браузером, и я нашел букмарклет, чтобы сохранить страницу в Readability:

JavaScript: (% 28function% 28% 29% 7Bwindow.baseUrl% 3D% 27http% 3A // www.readability.com% 27% 3Bwindow.readabilityToken% 3D% 27bbRmvVb9nTNRWSVEGb9yrcFP4USUHnTjk2EVWXjn% 27% 3Bvar% 20s% 3Ddocument.createElement% 28% 27script% 27% 29% 3Bs.setAttribute% 28% 27type% 27% 2C% 27text / JavaScript% 27% 29% 3Bs.setAttribute% 28% 27charset% 27% 2C% 27UTF-8% 27% 29% 3BS. SetAttribute% 28% 27src% 27% 2CbaseUrl% 2B% 27 / Bookmarklet / read.js% 27% 29% 3Bdocument.documentElement.appendChild% 28s% 29% 3B% 7D% 29% 28% 29)

Однако я не могу заставить его работать. Он работает в настольных Safari и мобильных / iPhone Safari. Но оба метода ниже ничего не делают:

[webview stringByEvaluatingJavaScriptFromString: удобочитаемость];

[webview loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: читабельность]]];

(читаемость - строка со значением выше)

Есть ли другой способ запуска закладок javascript, о котором я не знаю, или я делаю что-то не так? Помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 13 июня 2012

Грег

Вы получили эту ошибку из-за того, что URL-адрес javascript закодирован, вы должны декодировать строку javascript (возможно, вы используете NSURL для передачи строки, поэтому она была закодирована NSURL)

затем используйте строку веб-просмотраByEvaluatingJavaScriptFromString, это решение хорошо работает

-(void)loadUrl:(NSURL*)url
{
    if ([[url scheme] isEqualToString:@"javascript"])

    {
        NSRange range = [[url absoluteString] rangeOfString:@"javascript:"];
        NSString *javaScriptString = [[[url absoluteString] substringFromIndex:range.location + range.length] URLDecodedString];
        [self stringByEvaluatingJavaScriptFromString:javaScriptString];
    }
    else
    {
        [self loadRequest:[NSURLRequest requestWithURL:url]];
    }
}
0 голосов
/ 03 апреля 2012

Вам, вероятно, нужно использовать их API .То, что вы пытаетесь сделать, вероятно, предотвращено из соображений безопасности, и вам нужно указать свой собственный ключ API в запросе.

...