Как включить Javascript в WebView - PullRequest
1 голос
/ 12 июля 2009

У меня есть очень простое приложение Mac Cocoa, в котором есть веб-представление, которое загружает HTML-файл с некоторыми CSS и 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 не выполняется. Если я открою index.html в Safari, Hello World h1 исчезнет, ​​как и ожидалось. Почему это не происходит в приложении в моем WebView? Нужно ли что-то делать, чтобы включить JavaScript? В Интерфейсном Разработчике установлен флажок рядом с JavaScript.

Код для этого доступен на http://github.com/pjb3/WebViewApp

Ответы [ 3 ]

4 голосов
/ 12 июля 2009

Вам не нужно ничего делать, чтобы включить JavaScript; он включен в WebView по умолчанию. И, как вы сказали, в Интерфейсном Разработчике всегда можно проверить, установлен ли флажок JavaScript.

Тем не менее, вы должны убедиться, что baseURL, который вы указываете, является правильным (поскольку в html-файле вы ссылаетесь на jquery.js с относительным URL, используя только имя файла) и что вы включили файл jquery.js в ресурсы пакета .

Код, который вы опубликовали, приведет к значению nil для переменной url: +URLWithString: ожидает допустимую строку URL (которая соответствует RFC 2396) в качестве аргумента (который вы указываете путь к файловой системе: не). Вам нужен +fileURLWithPath:, и вам также нужно использовать путь к файловой системе каталога, в котором находятся index.html и jquery.js, который вы можете получить, удалив имя файла из вашего пути (используя NSString х -stringByDeletingLastPathComponent:). Вот как вы получите правильный baseURL:

NSURL *url = [NSURL fileURLWithPath:[filePath stringByDeletingLastPathComponent]];
2 голосов
/ 23 февраля 2010

Просто быстрое обновление для тех, кто все еще борется с этим ... У меня возникла точно такая же проблема, когда у меня была html-страница с библиотекой prototype.js, загруженной в раздел страницы. Но библиотека не загружалась, когда я открывал ту же страницу в WebView в приложении Какао. На самом деле никакие загружаемые файлы сценариев (даже мои) не работали в WebView.

Я скачал приведенный выше код github, который был предоставлен по ссылке, предоставленной pjb3, в надежде, что, возможно, он нашел исправление и обновил его. Нет такой удачи. У него все еще были те же проблемы.

И тогда я решил заглянуть в содержимое пакета скомпилированного приложения (так что это будет WebViewApp / Contents / Resources из каталога build / Debug или build / Release, где XCode скомпилировал ваше приложение) ... Ого! Файлы javascript, которые он поместил в раздел «Ресурсы» проекта XCode, на самом деле не копировались в каталог «Ресурсы» встроенного приложения. Я посмотрел свой проект, и это была та же проблема. Исправление? Просто перетащите любой из сценариев, которые вы добавили, в раздел «Копировать ресурсы комплекта» цели вашего приложения в XCode и вуаля, они будут там (и все будет работать!).

Я думал, что все, что вы помещаете в Ресурсы, копируется автоматически, но я думаю, что это не так. И, к сожалению, с WebView, если вы не проделаете небольшую работу, у вас не будет всех отличных веб-отладочных средств, которые были бы у Firefox или Safari, которые могли бы облегчить поиск этой проблемы. Поэтому, если вы сомневаетесь, проверьте, есть ли у вашего фактического скомпилированного приложения необходимые ему ресурсы в его каталоге Resources (возможно, это версия для программиста «Включено ли оно?»?). Это заняло у меня много царапин на голове, и мое единственное утешение для потерянных часов - то, что я, возможно, могу спасти некоторых других людей от того же самого. Удачного кодирования!

0 голосов
/ 12 июля 2009

В дополнение к тому, что сказал Хассег: почему бы не использовать это вместо загрузки файла?

NSURL *url = [NSURL fileURLWithPath:filePath];
[self.webView setMainFrameURL:url];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...