将参数发送到UIWebView中的本地文件

我正在开发一个原生的iPhone应用程序。 我能够将一个本地文件index.html加载到一个UIWebView中:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]isDirectory:NO]]]; 

网页加载正常。 现在,我想用一些参数加载web,就像在浏览器中input的那样:URL?var1 = myValue&var2 = myValue2

所以我可以在HTML文件的JavaScript里面获得这些值。 有没有办法将参数发送到本地的HTML文件?

谢谢!

最好的和真正的工作答案,只有在objC(记住保留您的文件夹结构 – 复制文件到Xcode使用“创build文件夹引用任何添加的文件夹”)

 NSString *path = [[NSBundle mainBundle] pathForResource:@"YOUR-HTML-FILE" ofType:@"html" inDirectory:@"YOUR-FOLDER" ]; NSURL *url = [NSURL fileURLWithPath:path]; NSString *theAbsoluteURLString = [url absoluteString]; NSString *queryString = @"?var=1232123232"; NSString *absoluteURLwithQueryString = [theAbsoluteURLString stringByAppendingString: queryString]; NSURL *finalURL = [NSURL URLWithString: absoluteURLwithQueryString]; NSURLRequest *request = [NSURLRequest requestWithURL:finalURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:(NSTimeInterval)10.0 ]; [web loadRequest:request]; 

Marjan的方式是使其工作的正确方法。

正如我的朋友特伦斯指出的,诀窍是使用绝对文件uri(file://)string正确地创build从string的URL。 这条路 ? 字符不会被编码,webview可以正确加载文件。

 [NSURL URLWithString: @"file://localhost/Users/sj/Library/Application%20Support/iPhone%20Simulator/5.0/Applications/../PrintingWebView.app/final.html?slide=2"]; 

或者使用URLWithString:relativeToURL方法

 NSURL *relativeURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]; NSURL *u = [NSURL URLWithString:@"html/index.html?site=2" relativeToURL:relativeURL]; 

您正在从自己的包中加载HTML,这意味着您可以完全控制它。 为什么不只是用你想要的字段参数化HTML。 您可以轻松地添加一些隐藏的input字段,您的JavaScript可以访问。 说你的HTML看起来像这样:

 <body> <form> Static Field 1: <input type="text" name="field1"><br> Static Field 2: <input type="text" name="field2"><br> %@ </form> </body> 

现在,只需将这些数据读入一个string,然后用下面的一些隐藏字段格式化%@即可:

 NSString *input = @"<input type=\"hidden\" name=\"field3\"><br>"; NSString *formatted = [NSString stringWithFormat:html, input]; 

然后在webview中调用-loadHTMLString:

 [webView loadHTMLString:formatted baseURL:nil]; 

有什么理由不能这样做。 现在你的javascript可以通过调用来获取隐藏的input字段的值:

 document.getElementsByName('field3')[0].value; 

你可以在你的本地html文件中插入一个javascript来parsingGET请求

 <script language="javascript"> function getget(name) { var q = document.location.search; var i = q.indexOf(name + '='); if (i == -1) { return false; } var r = q.substr(i + name.length + 1, q.length - i - name.length - 1); i = r.indexOf('&'); if (i != -1) { r = r.substr(0, i); } return r.replace(/\+/g, ' '); } </script> 

使用getget('parameter_name')从请求string获取参数。

不,不幸的不是。

但是,您可以通过使用UIWebView设置variables并调用JavaScript中的函数/方法来解决此问题:stringByEvaluatingJavaScriptFromString:

然后在webview中调用-loadHTMLString:

我相信他是避免使用loadHTMLString而不是loadRequest,因为它打破了UIWebView的button