我正在开发原生iPhone应用程序。我能够将本地文件index.html加载到UIWebView中:
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]isDirectory:NO]]];
网络加载正常。现在,我想用一些参数加载web,就像在浏览器中输入一样: URL VAR1 = myvalue的&安培; VAR2 = myValue2
所以我可以在html文件的javascript中获取这些值。有没有办法将参数发送到本地html文件?
谢谢!
答案 0 :(得分:26)
最好且真正有效的答案,仅在objC中(记得保留你的文件夹结构 - 使用“为任何添加的文件夹创建文件夹参考”将文件复制到xcode中)
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];
答案 1 :(得分:7)
马里安的方式是使其发挥作用的正确方法。
正如我的朋友Terence指出的那样,诀窍是使用绝对文件uri(file://)字符串 正确地从字符串创建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];
答案 2 :(得分:4)
您正在从自己的捆绑中加载HTML,这意味着您可以完全控制它。为什么不用您想要的字段参数化HTML。您可以轻松添加一些您的javascript随后可以访问的隐藏输入字段。说你的HTML看起来像这样:
<body>
<form>
Static Field 1: <input type="text" name="field1"><br>
Static Field 2: <input type="text" name="field2"><br>
%@
</form>
</body>
现在只需将此数据读入字符串并使用一些隐藏字段格式化%@:
NSString *input = @"<input type=\"hidden\" name=\"field3\"><br>";
NSString *formatted = [NSString stringWithFormat:html, input];
然后在webview中调用-loadHTMLString:
[webView loadHTMLString:formatted baseURL:nil];
你有什么理由不这样做吗?现在,您的javascript可以通过调用:
来获取隐藏输入字段的值document.getElementsByName('field3')[0].value;
答案 3 :(得分:3)
您可以在本地html文件中插入一个javascript来解析GET请求
<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')从请求字符串中获取参数。
答案 4 :(得分:2)
不,不幸的是没有。
设置变量并在JavaScript中调用函数/方法来解决这个问题。答案 5 :(得分:0)
然后在webview中调用-loadHTMLString:
我相信他避免使用loadHTMLString而不是loadRequest,因为它会破坏UIWebView的前后按钮