Отправка параметров в локальный файл в 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