在将本地.js文件注入到UIWebView中从另一台服务器托管的外部页面的过程中。
虽然我是新手,但我觉得以下代码应呈现远程HTML页面并使用本地js覆盖它。文件。实际上它只是加载没有js的页面。
我的 ViewController.m :
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//load url into webview
NSString *strURL = @"http://localhost:9080/test/";
NSURL *url = [NSURL URLWithString:strURL];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[self.viewWeb loadRequest:urlRequest];
NSString *js = [[NSBundle mainBundle] pathForResource:@"script" ofType:@"js" inDirectory:@"www" ];
[self.viewWeb stringByEvaluatingJavaScriptFromString:js];
}
.js文件( script.js )将.css文件( style.css )注入外部html页面的标题中:
var link = document.createElement("link");
link.href = "style.css";
link.type = "text/css";
link.rel = "stylesheet";
document.getElementsByTagName("head")[0].appendChild(link);
外部网页的HTML( index.html )是:
<html>
<head>
<meta name="viewport" content="initial-scale=1">
</head>
<body>
<div class="big">TEXT</div>
</body>
</html>
文件位于www
目录中,文件夹导入Xcode,“copy with create folder references”。
在Xcode项目之外,如果我将.js,.html,.css放在一个文件夹中,这一切都有效。但是,一旦我启动模拟器,它就不行了。有谁知道我做错了什么?
答案 0 :(得分:0)
我不是Javascript专家,但正如所写:
NSString *js = [[NSBundle mainBundle] pathForResource:@"script" ofType:@"js" inDirectory:@"www" ];
[self.viewWeb stringByEvaluatingJavaScriptFromString:js];
我不认为这可能是可行的。
pathForResource:ofType:inDirectory:
返回文件的路径。我再一次对Javascript几乎一无所知,但我非常怀疑文件路径看起来会像任何Javascript一样。
NSString *js = [[NSBundle mainBundle] pathForResource:@"script" ofType:@"js" inDirectory:@"www" ];
NSLog(@"%@",js);
尝试使用该代码段并查看打印内容。它将打印出两件事之一。如果找到该文件,它将打印该文件的文件路径。如果未找到填充,则会打印“(null)”(或类似的内容,因为如果找不到该文件,pathForResource:ofType:inDirectory:
方法将返回nil
。
为了在路径中获取文件的内容,您需要使用stringWithContentsOfFile:encoding:error:
NSString
类方法。