WebView не запускает JavaScript, указанный в loadHTMLString - PullRequest
4 голосов
/ 24 марта 2011

Я не понимаю, почему это не работает. У меня на рабочем столе есть файл test.htm, который выглядит следующим образом:

<html><head>

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
    tex2jax: {inlineMath: [["$","$"],["\\(","\\)"]]}
});
</script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full"></script></head>
<body>

This is $x^2$

</body></html>

и у меня есть WebView, который загружает это с моего рабочего стола через

[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"file:///Users/john/Desktop/test.htm"]]];

, который работает нормально. Страница загружается, запускается javascript MathJax, и $ x ^ 2 $ превращается в хороший наборный математический скрипт.

Однако, если я попытаюсь сделать это:

[[webView mainFrame] loadHTMLString:@"<html><head><script type=\"text/x-mathjax-config\">MathJax.Hub.Config({tex2jax: {inlineMath: [[\"$\",\"$\"],[\"\\\\(\",\"\\\\)\"]]}});</script><script type=\"text/javascript\" src=\"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full\"></script></head><body>This is $x^2$</body></html>" baseURL:[NSURL URLWithString:@"file:///"]];

, который загружает точно ту же самую веб-страницу после того, как новые строки убиты и \ заменены на "\", а "заменены на" \ ", JavaScript не запускается, и я просто см. обычный текст Это $ x ^ 2 $ без визуализации $ x ^ 2 $ через MathJax.

Есть ли какая-то секретная команда "на самом деле нет веб-просмотра, пожалуйста, выполните javascript для меня", которую я пропускаю?

Ответы [ 3 ]

3 голосов
/ 24 марта 2011

Хорошо, я "решил" это. По какой-то причине веб-представлению не нравится, что мой baseURL является файлом: ///. Когда я устанавливаю http://www.google.com,, все работает нормально. Я не понимаю, что не так с передачей этого файла: ///. Дополнительно используя

[[NSBundle mainBundle] URLForResource:@"blank" withExtension:@"htm"]

не работает, но это может быть потому, что в комплекте нет blank.htm.

0 голосов
/ 20 октября 2011

У меня тоже была такая же проблема.Я решил это, сохранив «textHTML» в файле в папке «Документ» и загрузив MathJax из папки ресурсов (в моем случае или в данном случае загрузку с веб-сайта MathJax), после чего это сработало.Если ваши файлы MathJax являются локальными (например, мое приложение), вам нужно изменить адрес своего скрипта в тексте HTML на этот скрипт (будьте осторожны при написании своего адреса, потому что устройство работает с учетом регистра, в отличие от симулятора):

<script type="text/javascript" src="../YOUR_APPLICATION_NAME.app/MathJax/MathJax.js"></script>

Это подробно здесь:

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
path = [path stringByAppendingString:@"/myHTML.html"];
NSString *textHTML = @"<html>..."; // change to your HTML string
NSError *error;
BOOL ok = [textHTML writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
if(ok){
    NSLog(@"Write done!");
    NSURL *url = [NSURL fileURLWithPath:path isDirectory:NO];
    [webView loadRequest:[NSURLRequest requestWithURL:url]];
}else
    NSLog(@"Error!");

Надеюсь, это работает для вас!

0 голосов
/ 19 мая 2011

У меня была та же проблема, мое решение заключалось в том, чтобы встроить JavaScript в HTML-файл. Когда он был в отдельном файле javascript, то по какой-то причине он отказался запускать javascript. Файл javascript был включен в проект xcode.

Все еще удивляетесь, почему отдельные файлы javascript не работают, есть идеи?

...