Можно ли использовать stringByEvaluatingJavaScriptFromString с Javascript, который ссылается на локальные файлы?

StackOverflow https://stackoverflow.com/questions/1893715

Вопрос

Я хочу использовать stringByEvaluatingJavaScriptFromString для запуска javascript, который ссылается на локальные файлы (в данном случае файлы css, но, возможно, и файлы js), которые находятся на устройстве (я думаю, в папке «Документы»?)...

 NSString *theJS = [[NSString alloc]
 initWithString:@"javascript:(function()
{the_css.rel='stylesheet';
the_css.href='the_css.css';
the_css.type='text/css';
the_css.media='screen';}
)();"];

[webView stringByEvaluatingJavaScriptFromString:theJS];

Как мне заставить это работать?Он отлично работает, если я использую внешний файл CSS, например

the_css.href='http://www.website.com/the_css.css';
Это было полезно?

Решение

Раньше я использовал этот код при загрузке HTML

NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:bundlePath];

[webView loadData:data MIMEType:@"text/html" textEncodingName:@"utf-8 " baseURL:baseURL];

При этом местоположение пакета будет передано в качестве базового URL-адреса, что должно привести к правильной работе ваших относительных URL-адресов.Конечно, вам не обязательно использовать именно это loadData метод, существуют различные перегрузки.Просто возьми baseUrl там, и вам должно быть хорошо идти.

Если ничего не помогает, вы можете использовать что-то вроде:

NSString *path = [[NSBundle mainBundle] pathForResource:@"file.css" ofType:nil]]

И добавьте это на страницу с заменой строк или чем-то еще.Хотя немного хакерски.

Другие советы

Вам следует сделать это вот так.

NSString *cssPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"the_css.css"];
NSURL *baseURL = [NSURL fileURLWithPath:cssPath];


 NSString *theJS = [[NSString alloc]
 initWithFormat:@"javascript:(function()
{the_css.rel='stylesheet';
the_css.href='%@';
the_css.type='text/css';
the_css.media='screen';}
)();",baseURL];
[cssPath release];

[webView stringByEvaluatingJavaScriptFromString:theJS];

Надеюсь, это решит проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top