代码之家  ›  专栏  ›  技术社区  ›  pjb3

如何在WebView中启用JavaScript

  •  1
  • pjb3  · 技术社区  · 15 年前

    我有一个非常简单的MacCocoa应用程序,它只有一个Web视图,可以加载带有一些CSS和JavaScript的HTML文件。我已将应用程序委托连接到该方法:

    - (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>
    

    CSS文件得到了正确的加载,因为我在其中将背景设置为灰色,所以我知道它可以从资源包中加载其他资产。未执行javascript代码。如果我在Safari中打开index.html,Hello World h1 如预期般消失。为什么在我的网络视图中的应用程序中不会发生这种情况?我需要做些什么来启用JavaScript吗?Javascript旁边的框在Interface Builder中被选中。

    此代码可在 http://github.com/pjb3/WebViewApp

    3 回复  |  直到 15 年前
        1
  •  4
  •   hasseg    15 年前

    您不必做任何事情来启用javascript;它是在 WebView 默认情况下。如您所说,您可以随时签入Interface Builder,选中javascript复选框。

    不过,你要做的是确保 这个 baseURL 你说的是对的 (因为在您所指的HTML文件中 jquery.js 使用一个相对的URL,只使用文件名),并且 包括 JQuel.js 文件到包资源中 .

    您发布的代码将导致 nil 价值为 url 变量: +URLWithString: 需要一个有效的URL字符串(符合RFC2396)作为参数(您提供的文件系统路径不是这个参数)。你想要的是 +fileURLWithPath: ,您还需要使用目录的文件系统路径, index.html JQuel.js 驻留,可以通过从路径中删除文件名(使用 NSString -stringByDeletingLastPathComponent: )以下是正确答案的方法 巴苏 :

    NSURL *url = [NSURL fileURLWithPath:[filePath stringByDeletingLastPathComponent]];
    
        2
  •  2
  •   David Ackerman    15 年前

    只是一个很快的更新,对于任何一个仍在挣扎的人…我也遇到了同样的问题,我在页面的<head>/head>部分加载了一个带有prototype.js库的HTML页面。但当我在一个Cocoa应用程序的WebView中打开同一个页面时,库没有被加载。实际上,在WebView中似乎没有加载的脚本文件(甚至我自己的脚本文件)起作用。

    我从PJB3提供的链接下载了上面的Github代码,希望他能找到一个补丁并对其进行更新。没有这样的运气。它仍然有同样的问题。

    然后我决定查看编译后的应用程序的包内容(这将是xcode编译应用程序的build/debug或build/release目录下的webviewapp/contents/resources)。 噢!他在xcode项目的resources部分中放置的javascript文件实际上没有被复制到已构建应用程序的resources目录中。 我查看了我的项目,但问题是一样的。 修复?只需将您添加的任何脚本拖动到Xcode和Voila中应用程序目标的“复制捆绑资源”部分,它们就会出现(实际上一切都会工作!).

    我以为你放在资源中的所有东西都是自动复制的,但我想不是这样。不幸的是,如果你不做点工作,你就没有火狐或Safari所拥有的所有优秀的网络调试工具,这会使这个问题更容易找到。因此,如果有疑问,请检查您实际编译的应用程序在其资源目录下是否具有所需的资源(这可能是程序员版本的“是否已插入?”?)这让我抓耳挠腮,对于失去的几个小时,我唯一的安慰就是我可以从中拯救一些其他人。快乐编码!

        3
  •  0
  •   Peter Hosey    15 年前

    除了哈赛格所说的:为什么不用这个来加载文件呢?

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