我有一个非常简单的Mac Cocoa应用程序,它只有一个Web视图,可以加载带有一些CSS和JavaScript的HTML文件。我已经将app委托连接到这个方法:
- (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旁边的框。
答案 0 :(得分:4)
您无需执行任何操作即可启用JavaScript;它默认在WebView
中启用。就像你说的那样,你总是可以在Interface Builder中检查是否选中了JavaScript复选框。
但是,您需要做的是确保您指定的baseURL
是正确的(因为在html文件中您指的是jquery.js
使用仅使用文件名的相对网址,并且将jquery.js
文件包含在捆绑资源中。
您发布的代码将为nil
变量生成url
值:+URLWithString:
期望有效的URL字符串(符合RFC 2396)作为参数(文件系统)你提供的路径不是)。你想要的是+fileURLWithPath:
,你还需要使用index.html
和jquery.js
所在目录的文件系统路径,你可以通过从你的路径中删除文件名来获得得到了(使用NSString
的{{1}})。以下是您获得正确的-stringByDeletingLastPathComponent:
:
baseURL
答案 1 :(得分:2)
对于仍在努力解决这个问题的人来说,只是一个快速更新......我遇到了一个完全相同的问题,我在html页面上加载了原型.js库,并在&lt; head&gt;&lt; / head&gt;中加载了页面的一部分。但是当我在Cocoa应用程序中的WebView中打开同一页面时,没有加载库。实际上,没有加载的脚本文件(甚至我自己的)似乎在WebView中工作。
我从链接pjb3下载了上面的github代码,希望他可能找到了修复程序并更新了它。没有这样的运气。它仍然有同样的问题。
然后我决定查看已编译应用程序的包内容(这样就可以是构建/调试的WebViewApp / Contents / Resources或者XCode编译你的app的build / Release目录)... 啊哈!他放在XCode项目的Resources部分中的javascript文件实际上并没有被复制到构建应用程序的Resources目录。我查看了我的项目,这也是同样的问题。 修复?只需将您添加的任何脚本拖到XCode中的应用程序目标的“复制包资源”部分,瞧,他们就会在那里(事情确实会有效!)。
我认为你在资源中所做的一切都是自动复制的,但我想不是。不幸的是,使用WebView,除非你做了一些工作,否则你没有Firefox或Safari所能提供的所有优秀的Web调试功能,这会让这个问题更容易找到。因此,如果有疑问,请检查您的实际编译应用程序是否具有其资源目录下所需的资源(这可能是程序员的版本“它是否插入?”?)。这让我头疼不已,我唯一的安慰是因为我可以挽救其他一些人。快乐的编码!
答案 2 :(得分:0)
除了hasseg所说的:为什么不使用它来加载文件呢?
NSURL *url = [NSURL fileURLWithPath:filePath];
[self.webView setMainFrameURL:url];