Iphone 将参数发送到UIWebView中的本地文件
我正在开发一款原生iPhone应用程序。我可以将本地文件index.html加载到UIWebView中:Iphone 将参数发送到UIWebView中的本地文件,iphone,objective-c,ios,uiwebview,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?
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]isDirectory:NO]]];
网络负载良好。现在,我想用一些参数加载web,方法与在浏览器中键入相同:
URL?var1=myValue&var2=myValue2
所以我可以在html文件的javascript中获取这些值。有没有办法将参数发送到本地html文件
谢谢 没有,不幸的是没有
但是,您可以通过设置变量和调用JavaScript中的函数/方法来解决这个问题,方法是使用从您自己的包加载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];
你有什么理由不能那样做吗。现在,您的javascript可以通过调用以下命令获取隐藏输入字段的值:
document.getElementsByName('field3')[0].value;
您可以在本地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(名称){
var q=document.location.search;
变量i=q.indexOf(name+'=');
如果(i==-1){
返回false;
}
var r=q.substr(i+name.length+1,q.length-i-name.length-1);
i=r.indexOf('&');
如果(i!=-1){
r=r.substr(0,i);
}
返回r.replace(/\+/g',);
}
使用getget('parameter_name')从请求字符串获取参数
然后在webview中调用-loadHTMLString:
[webView loadHTMLString:formatted baseURL:nil];
我相信他是在避免使用loadHTMLString而不是loadRequest,因为它打破了UIWebView的后退和前进按钮,这是最好的、真正有效的答案,只有在objC中(记住要保留文件夹结构——使用“为任何添加的文件夹创建文件夹引用”将文件复制到xcode中)
Marjan的方法是使它工作的正确方法 正如我的朋友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];
我在本地html文件中定义了一个javascript函数。我可以加载该文件,但是,如何调用该文件中的javascript函数呢?我需要一个示例。[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@“myJavascriptFunction(%f);”,1.0f]];你让它工作了吗?是否调用myJavascriptFunction函数?在我的代码中它不。。。我怎样才能确定通话是否正在进行?这个答案可以帮助我找到一个更简单的解决方案!
NSURL *relativeURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
NSURL *u = [NSURL URLWithString:@"html/index.html?site=2" relativeToURL:relativeURL];