Отправить параметры в локальный файл в UIWebView - PullRequest
11 голосов
/ 04 августа 2009

Я работаю над родным приложением для 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-файл?

Спасибо!

Ответы [ 6 ]

26 голосов
/ 05 ноября 2010

Лучший и действительно рабочий ответ, только в 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];
7 голосов
/ 14 марта 2012

Путь Марьян - это правильный способ заставить его работать.

Как заметил мой друг Теренс, хитрость заключается в использовании абсолютной строки файла 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 :lativeToURL метод

NSURL *relativeURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
NSURL *u = [NSURL URLWithString:@"html/index.html?site=2" relativeToURL:relativeURL];
4 голосов
/ 04 августа 2009

Вы загружаете 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;
3 голосов
/ 16 октября 2009

Вы можете вставить в свой локальный 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 ('имя_параметра'), чтобы получить параметр из строки запроса.

2 голосов
/ 04 августа 2009

Нет, к сожалению, нет.

Однако вы можете обойти это, задав переменные и вызвав функции / методы в JavaScript, используя UIWebView: stringByEvaluatingJavaScriptFromString:

0 голосов
/ 13 января 2010

Затем вызовите -loadHTMLString: в веб-представлении.

Я полагаю, что он избегал использовать loadHTMLString вместо loadRequest, потому что он ломает кнопки вперед и назад UIWebView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...