Встраивание CSS UIWebView с использованием JavaScript
Я пытаюсь ввести локальный файл css в UIWebView, который завершил загрузку веб-сайта, такого как Google и т.д.
Я пытаюсь использовать JavaScript, но без успеха.
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSString *cssPath = [[NSString alloc] initWithString:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"styles.css"]];
NSURL *baseURL = [NSURL fileURLWithPath:cssPath];
NSString *js = [NSString stringWithFormat:@"var fileref = document.createElement('link');
fileref.setAttribute('rel', 'stylesheet');
fileref.setAttribute('type', 'text/css');
fileref.setAttribute('href', %@);", baseURL];
[webView stringByEvaluatingJavaScriptFromString:js];
}
Спасибо,
Ответы
Ответ 1
Чтобы вставить javascript в веб-представление, вы должны явно писать в html.
Пример этого здесь, где я написал в функции scrollTo javascript:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"
"script.type = 'text/javascript';"
"script.text = \"function myFunction() { "
"window.scrollTo(100,100)"
"}\";"
"document.getElementsByTagName('head')[0].appendChild(script);"];
[webView stringByEvaluatingJavaScriptFromString:@"myFunction();"];}
Этот код записывает целые теги script и myFunction в начало HTML
Ответ 2
У меня была аналогичная потребность. У меня есть локальные html файлы в пакете, которые я хотел бы изменить css-атрибуты программно. Поскольку вы не можете изменять файлы в комплекте, я хотел бы ввести свой css во время загрузки из переменных в приложении.
Приведенный ниже код демонстрирует технику, просто замените свой метод на получение css, т.е. прочитайте из файла, plist, code или db.
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString* css = @"\"@font-face { font-family: 'Chalkboard'; src: local('ChalkboardSE-Regular'); } body { background-color: #F0F0FC; color: #572B00; font-family: Chalkboard;} a { color: #A00; text-decoration: none;}\"";
NSString* js = [NSString stringWithFormat:
@"var styleNode = document.createElement('style');\n"
"styleNode.type = \"text/css\";\n"
"var styleText = document.createTextNode('%@');\n"
"styleNode.appendChild(styleText);\n"
"document.getElementsByTagName('head')[0].appendChild(styleNode);\n",css];
NSLog(@"js:\n%@",js);
[self.webView stringByEvaluatingJavaScriptFromString:js];
}
Ответ 3
Я бы предложил вам создать файл js и добавить в файл проекта.
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"js"];
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
NSString *jsString = [[NSString alloc] initWithData:fileData encoding:NSUTF8StringEncoding];
и вы знаете, как вызвать js в html файле. это самый простой и чистый способ сделать это.