注入Javascript不覆盖UiWebView中的URL

时间:2014-07-06 14:40:11

标签: javascript ios objective-c uiwebview

在将本地.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放在一个文件夹中,这一切都有效。但是,一旦我启动模拟器,它就不行了。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

我不是Javascript专家,但正如所写:

NSString *js = [[NSBundle mainBundle] pathForResource:@"script" ofType:@"js" inDirectory:@"www" ];
[self.viewWeb stringByEvaluatingJavaScriptFromString:js];

我不认为这可能是可行的。

pathForResource:ofType:inDirectory:返回文件的路径。我再一次对Ja​​vascript几乎一无所知,但我非常怀疑文件路径看起来会像任何Javascript一样。

NSString *js = [[NSBundle mainBundle] pathForResource:@"script" ofType:@"js" inDirectory:@"www" ];
NSLog(@"%@",js);

尝试使用该代码段并查看打印内容。它将打印出两件事之一。如果找到该文件,它将打印该文件的文件路径。如果未找到填充,则会打印“(null)”(或类似的内容,因为如果找不到该文件,pathForResource:ofType:inDirectory:方法将返回nil

为了在路径中获取文件的内容,您需要使用stringWithContentsOfFile:encoding:error: NSString类方法。