Отправка параметров в локальный файл в UIWebView
Я работаю над родным приложением для iPhone. Я могу загрузить локальный файл index.html в UIWebView:
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]isDirectory:NO]]];
Сеть загружается отлично. Теперь я хотел бы загрузить в Интернете некоторые параметры, так же, как это можно сделать в браузере:
URL-адрес var1 = MyValue &? Var2 = myValue2
Поэтому я могу получить эти значения внутри javascript файла html. Есть ли способ отправить параметры в локальный html файл?
Спасибо!
Ответы
Ответ 1
Лучший и действительно рабочий ответ, только в 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];
Ответ 2
Марджанский путь - это правильный способ заставить его работать.
Как сказал мой друг Теренс, трюк заключается в использовании абсолютной строки файла uri (file://)
при правильном создании URL из строки. Сюда? символ не получает кодировку, и веб-просмотр может загрузить файл должным образом.
[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];
Ответ 3
Вы загружаете 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];
Затем вызовите -loadHTMLString: в веб-просмотре.
[webView loadHTMLString:formatted baseURL:nil];
Есть ли какая-то причина, по которой вы не могли бы этого сделать. Теперь ваш javascript может захватить значение скрытого поля ввода с помощью вызова:
document.getElementsByName('field3')[0].value;
Ответ 4
Вы можете вставить в свой локальный 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'), чтобы получить параметр из строки запроса.
Ответ 5
Нет, к сожалению нет.
Однако вы можете обойти это, установив переменные и вызывающие функции/методы в JavaScript с помощью UIWebView: stringByEvaluatingJavaScriptFromString:
Ответ 6
Затем вызовите -loadHTMLString: в веб-просмотре.
Я считаю, что он избегал использования loadHTMLString вместо loadRequest, потому что он прерывает и переводит кнопки UIWebView