1

我想使用 stringByEvaluatingJavaScriptFromString 来运行一个javascript,它引用设备上的本地文件(在这种情况下是css文件,但也可能是js文件)(我猜是在Documents文件夹中?)...

 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';
4

2 回答 2

4

我过去所做的是在加载 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]]

并通过一些字符串替换或其他方式将其注入页面。不过有点hacky。

于 2009-12-12T15:20:03.270 回答
0

你应该这样做。

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];

希望这能解决问题。

于 2009-12-13T07:46:36.057 回答