2009-07-12 54 views
1

我有一个非常简单的Mac Cocoa应用程序,它只是一个Web视图,可以用一些CSS和JavaScript加载HTML文件。我已经迷上了应用程序委托给此方法:如何在WebView中启用JavaScript

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    NSString* filePath = [[NSBundle mainBundle] pathForResource: @"index" ofType: @"html"]; 
    NSURL *url = [NSURL URLWithString: filePath]; 
    [[self.webView mainFrame] loadHTMLString: [NSString stringWithContentsOfFile: filePath] baseURL: url]; 
} 

index.html文件包含以下内容:

<html> 
    <head> 
    <title>Hello, World!</title> 
    <link href="style.css" rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript"> 
     jQuery(function($){ 
     $('h1').fadeOut() 
     }) 
    </script> 
    </head> 
    <body> 
    <h1>Hello, World!</h1> 
    </body> 
</html> 

style.css文件被加载正确的,因为我设置的背景为灰色因为我知道它可以从资源包中加载其他资源。 JavaScript代码不会被执行。如果我在Safari中打开index.html,则Hello World h1会按预期消失。为什么这不会在我的WebView中的应用程序中发生?我必须做些什么来启用JavaScript?在Interface Builder中检查JavaScript旁边的框。

该代码,这是可以在http://github.com/pjb3/WebViewApp

回答

4

你不必做任何事情来启用JavaScript;它在默认情况下在WebView中启用。就像你说的,你可以随时在Interface Builder中检查JavaScript复选框是否被选中。

,你所要做的,不过,是确保你指定的baseURL是正确的(因为在HTML文件中你指的是jquery.js,只要使用的文件名相对URL)和你已将包含在jquery.js文件中,并放入捆绑资源

您发布将导致为url变量nil值码:+URLWithString:需要一个有效的URL字符串(符合RFC 2396)作为参数(这您所提供的文件系统路径是不是)。你想要的是+fileURLWithPath:,而且你还需要使用index.htmljquery.js所在目录的文件系统路径,你可以通过从你得到的路径中删除文件名(使用NSString-stringByDeletingLastPathComponent:)来获得文件路径。这里是你如何得到正确的baseURL

NSURL *url = [NSURL fileURLWithPath:[filePath stringByDeletingLastPathComponent]]; 
+0

我已经做出了这些更新,这是有道理的,但它似乎仍然没有工作。你可以在http://github.com/pjb3/WebViewApp – pjb3 2009-07-12 13:20:00

+0

看到代码啊,我明白了。我不知道你的意思,“将jquery.js文件包含到捆绑资源中”。我拖动资源文件夹中的.js文件到“复制软件包资源”中,这个东西:),在目标中的WebViewApp下。一切都很好,谢谢! – pjb3 2009-07-12 13:53:15

0

除了什么hasseg说:为什么不使用此加载的文件呢?

NSURL *url = [NSURL fileURLWithPath:filePath]; 
[self.webView setMainFrameURL:url]; 
2

只是一个快速更新的人还在为此苦苦挣扎......我在那里我有一个HTML页面中<头> < /头>部分加载Prototype.js库完全相同的问题的页面。但是,当我在Cocoa应用程序的WebView中打开同一页面时,该库没有被加载。实际上,没有加载脚本文件(甚至是我自己的)似乎在WebView中工作。

我从链接pjb3提供的,下载了上面的github代码,希望他可能找到了一个修复并更新它。没有这样的运气。它仍然有同样的问题。

然后我决定查看已编译应用程序的包内容(这样就可以将WebViewApp /内容/资源从构建/调试或构建/发布目录中XCode已编译您的应用程序).​​.. 啊哈!他放在XCode项目的Resources部分中的JavaScript文件实际上并没有被复制到构建应用程序的Resources目录中。我看着我的项目,这是同样的问题。 修复?只需将添加的任何脚本拖放到XCode中应用目标的“复制捆绑软件资源”部分,然后瞧,他们就会在那里(而且事情会真正起作用!)。

我认为你放入参考资料的所有内容都是通过自动方式复制的,但我想不是。不幸的是,对于WebView,除非你做了一些工作,否则你并不具备火狐浏览器或Safari浏览器可能会让这个问题更容易找到的所有优秀的网络调试功能。因此,如果有疑问,请检查您的实际编译的应用程序是否在其资源目录下有需要的资源(这可能是程序员的版本“是否插入?”?)。这让我感到头痛不已,对于失去的时间我唯一的安慰就是我可以拯救同样的其他人。快乐的编码!

相关问题