stringByEvaluatingJavaScriptFromString вопрос - PullRequest
1 голос
/ 15 июля 2011

Я пытаюсь использовать эту строку кода

[webView stringByEvaluatingJavaScriptFromString:@"test();"];

, но она не работает.У меня есть несколько файлов JavaScript, и я не знаю, как сказать программе, какой я пытаюсь использовать.Файлы загружаются из локального файла HTML.Если кто-то знает, как я бы по-настоящему оценил это, или если кто-то знает другой способ использования цели c для вызова javascript.

Спасибо Клинтон

Ответы [ 2 ]

3 голосов
/ 15 июля 2011

Скорее всего, вы пытаетесь запустить это до загрузки HTML. WebView загружается асинхронно, даже если файлы локальные. Вам нужно реализовать WebFrameLoadDelegate и ждать от webView:didFinishLoadForFrame:, прежде чем пытаться задействовать встроенный JavaScript.

0 голосов
/ 15 июля 2011

Код, который вы разместили:

[webView stringByEvaluatingJavaScriptFromString:@"test();"];

правильный.Единственное, о чем я могу думать как о причине вашей проблемы, это то, что по какой-то причине файл javascript, содержащий функцию test, не загружается.

Попробуйте это:

NSString* result = [webView stringByEvaluatingJavaScriptFromString:@"document.title;"];

ипосмотрите, получите ли вы значение в result.

РЕДАКТИРОВАТЬ:

Если вы загружаете локальный файл HTML, который содержит ссылки на локальные файлы JavaScript, то наиболее вероятная причина для вашего виданеправильное поведение, не указывает baseURL при инициализации UIWebView, например:

- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL

Это должно позволить вам правильно загружать файлы JavaScript, доступные в вашей папке ресурсов:

NSString* basePath = [[NSBundle mainBundle] bundlePath];
[_label loadHTMLString:htmlString baseURL:[NSURL fileURLWithPath:basePath]];

Если вы дадите более подробную информацию о том, как организованы ваши файлы HTML / javascript, я могу помочь вам в этом (если моя гипотеза верна).

РЕДАКТИРОВАТЬ 2:

(Вдалее, я предполагаю, что вы находитесь на MacOS, но я понимаю, что об этом нигде здесь не было сказано, если бы в iOS применялись аналогичные рассуждения, но детали были бы другими)

Во-первых, делаетВаш метод делегата webView:didFinishLoadForFrame: вызывается?Или –webView:didFailLoadWithError:forFrame: вызывается?

Как указано в другом ответе, вы можете выполнить javascript только после веб-просмотра.

С другой стороны, япочти уверен, что вы неправильно передаете baseURL

 NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"allFiles"]; 
 htmlData = [NSData dataWithContentsOfFile:htmlPath]; 
 [webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:htmlPath]];

в этом фрагменте, baseURL - ваш файл <prefix>/allFiles/index.html;Вы должны просто передать <prefix>/allFiles для baseURL, и если с остальным все в порядке (имеется в виду didFinishLoad и html-файл, ссылающийся на сценарии с относительным путем к каталогу сценариев), то это должно сработать.

Теперь я не могу предложить способ, чтобы правильно определить путь к каталогу "allFiles" (довольно поздно здесь), но просто для того, чтобы сделать тест, вы можете урезать свой текущий htmlPath, чтобы удалить из него индекс ".html "подстрока ...

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