WebView不运行loadHTMLString中给出的JavaScript

时间:2011-03-24 17:56:37

标签: cocoa webview mathjax

我不明白为什么这不起作用。我的桌面上有一个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"]]];

工作正常。页面加载,MathJax javascript运行,$ 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:///"]];

在新行被杀后用完全加载相同的网页,\'被替换为“\”而“s被'\”替换,JavaScript无法运行,而我只看纯文本这是$ x ^ 2 $而没有$ x ^ 2 $通过MathJax呈现。

是否有一些秘密,“没有真正的webview,请为我执行javascript”命令,我错过了?

3 个答案:

答案 0 :(得分:3)

好的,我“解决了”这个。由于某种原因,Web视图不喜欢我的baseURL是file:///。当我将其设置为http://www.google.com时,一切正常。我不明白传递file:///有什么问题。另外使用

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

不起作用,但这可能是因为捆绑中没有blank.htm。

答案 1 :(得分:0)

我有同样的问题,我的解决方案是将javascript嵌入到html文件中。当我把它放在一个单独的javascript文件中时,由于某种原因它拒绝运行javascript。 javascript文件包含在xcode项目中。

仍然想知道为什么单独的javascript文件不起作用,任何想法?

答案 2 :(得分:0)

我也有同样的问题。 我通过将“textHTML”保存在Document文件夹中的文件并从资源文件夹(在我的情况下或在本例中从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!");

我希望,它适合你!