javascript - 如何在 WebView 中启用 javascript

标签 javascript objective-c cocoa webkit

我有一个非常简单的 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.htmljquery.js所在目录的文件系统路径,您可以通过从您获得的路径中删除文件名来获得(使用 NSString-stringByDeletingLastPathComponent:)。以下是获取正确 baseURL 的方法:

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

关于javascript - 如何在 WebView 中启用 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1115221/

相关文章:

javascript - 创建一个具有类似 Array 行为的 ES6 类

objective-c - UITableView dataSource 必须从 tableView :cellForRowAtIndexPath error 返回一个单元格

objective-c - NSView - 如何在不重绘父 View 的情况下重绘 subview

cocoa - 使用 NSOutputStream POST 到 url

cocoa - 如何在不使用 NSTreeController 的情况下获取 NSOutlineView 的选定项?

javascript - 我一直试图让这个球反弹一天。为什么它不起作用?

javascript - 为什么 WebRTC 有时会使用 TURN?

objective-c - 委托(delegate)引用它作为委托(delegate)的对象是否是一种不好的做法?

iOS 用户默认值 - 我需要使用 setInteger :forKey: if I intend to retrieve primitives from defaults using integerForKey:?

javascript - 更改 Angular JS 中按钮单击的下拉选项