UIWebView CSS-инъекция с использованием JavaScript - PullRequest
14 голосов
/ 01 августа 2011

Я пытаюсь внедрить локальный файл 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];
}

Спасибо

Ответы [ 3 ]

20 голосов
/ 20 июня 2012

У меня была похожая потребность.У меня есть локальные HTML-файлы в комплекте, которые я хотел изменить атрибуты CSS программно.Поскольку вы не можете изменять файлы в пакете, я хотел внедрить мой css во время загрузки из переменных в приложении.

Приведенный ниже код демонстрирует технику, просто замените ваш метод для получения css, то есть чтения изфайл, plist, код или 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];
}
6 голосов
/ 01 августа 2011

Чтобы внедрить 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();"];}

Этот кодзаписывает целые теги сценария и функцию myFunction в заголовок HTML

4 голосов
/ 01 августа 2011

Я бы предложил вам создать файл js и добавить его в файл проекта.

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"js"];

NSData *fileData = [NSData dataWithContentsOfFile:filePath]; 

NSString *jsString = [[NSString alloc] initWithData:fileData encoding:NSUTF8StringEncoding];

, и вы знаете, как вызывать js в файле html.это самый простой и чистый способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...