我有一个非常简单的 Mac Cocoa 应用程序,它只有一个 Web View ,可以加载带有一些 CSS 和 JavaScript 的 HTML 文件。我已将应用程序委托(delegate)连接到此方法:
- (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 文件被正确加载,因为我在其中将背景设置为灰色,所以我知道它可以从资源包中加载其他 Assets 。 javascript 代码不会被执行。如果我在 Safari 中打开 index.html,Hello World h1
会按预期消失。为什么这不会发生在我的 WebView 中的应用程序中?我必须做些什么来启用 JavaScript 吗?在 Interface Builder 中选中了 JavaScript 旁边的框。
此代码可在 http://github.com/pjb3/WebViewApp 获得。
最佳答案
您无需执行任何操作即可启用 JavaScript;默认情况下,它在 WebView
中启用。正如您所说,您始终可以在 Interface Builder 中检查是否选中了 JavaScript 复选框。
不过,您需要做的是确保您指定的 baseURL
是正确的(因为在 html 文件中您指的是 jquery.js
和仅使用文件名的相对 URL)并且您已将 jquery.js
文件包含到包资源中。
您发布的代码将为 url
变量生成一个 nil
值:+URLWithString:
需要一个有效的 URL 字符串(符合到 RFC 2396)作为参数(您提供的文件系统路径不是)。你要的是+fileURLWithPath:
,还需要使用index.html
和jquery.js
所在目录的文件系统路径,您可以通过从您获得的路径中删除文件名来获得(使用 NSString
的 -stringByDeletingLastPathComponent:
)。以下是获取正确 baseURL
的方法:
NSURL *url = [NSURL fileURLWithPath:[filePath stringByDeletingLastPathComponent]];
关于javascript - 如何在 WebView 中启用 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1115221/