Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将参数发送到UIWebView中的本地文件_Iphone_Objective C_Ios_Uiwebview - Fatal编程技术网

Iphone 将参数发送到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?

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


谢谢

没有,不幸的是没有


但是,您可以通过设置变量和调用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];