是否可以将stringByEvaluatingJavaScriptFromString与引用本地文件的Javascript一起使用?

时间:2009-12-12 15:13:13

标签: javascript iphone uiwebview stringbyevaluatingjavascr

我想使用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';

2 个答案:

答案 0 :(得分:4)

我在过去所做的事情是在加载HTML时使用此代码

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

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

这会将捆绑位置作为基本网址传递,这会导致您的相对网址正常工作。当然,您不必使用这种精确的loadData方法,但存在各种重载。只需在那里获得baseUrl,你应该好好去。

如果所有其他方法都失败了,您可以使用以下内容:

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

并将其注入页面中,并添加一些字符串或其他内容。但是有点hacky。

答案 1 :(得分: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];

希望这能解决问题。