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

时间:2009-08-04 08:47:04

标签: iphone objective-c ios uiwebview

我正在开发原生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文件?

谢谢!

6 个答案:

答案 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)

不,不幸的是没有。

但是,您可以通过使用UIWebView:stringByEvaluatingJavaScriptFromString:

设置变量并在JavaScript中调用函数/方法来解决这个问题。

答案 5 :(得分:0)

  

然后在webview中调用-loadHTMLString:

我相信他避免使用loadHTMLString而不是loadRequest,因为它会破坏UIWebView的前后按钮