Какие существуют методы для отладки Javascript внутри UIWebView? - PullRequest
125 голосов
/ 04 мая 2010

Я пытаюсь выяснить, почему что-то с Javascript не работает внутри UIWebView. Насколько мне известно, нет способа установить точку останова внутри XCode для файла js. Нет проблем, я просто вернусь к 2004 году и буду использовать оповещения государственных деятелей - о, подождите, они тоже не работают внутри UIWebView!

Единственное, о чем я мог подумать, это экспортировать мои файлы HTML и JS на мой рабочий стол, а затем просто делать отладку внутри Safari. И это работает! Но, конечно же, ошибка, с которой я борюсь в UIWebView, не возникает в Safari.

Существуют ли другие способы отладки внутри UIWebView или какие-либо приемы, которые я могу использовать, подобно использованию метода оповещения старой школы?

Ответы [ 8 ]

259 голосов
/ 23 сентября 2012

Если вы используете iOS> = 6 и у вас есть горный лев (10.8) или Safari> = 6, вы можете просто:

  1. Откройте приложение в симуляторе (или ваше устройство в XCode> = 4.5.x).
  2. Откройте Safari (перейдите на Preferences -> Advanced и убедитесь, что «Показать меню разработки в Menubar» включено.
  3. В строке меню (в Safari) выберите Develop -> iPhone Simulator -> [your webview page].

Вот и все!

31 голосов
/ 02 декабря 2011

Этот запрос превосходит Google, поэтому стоит связать его с remoteInspector, скрытым в iOS5 - безусловно, лучший из пока найденных способов отладки ваших UIWebViews - просто условно скомпилировать перед отправкой в ​​Apple.

9 голосов
/ 21 мая 2010

alert () определенно работает для меня.

Однако вы также можете делать много других вещей, например, создавать свое собственное предупреждение DHTML, которое появляется в слое. Это может быть хорошо, потому что вы можете сделать несколько предупреждений для одного div, не останавливая приложение. Вы также должны быть в состоянии записать в него трассировку стека (трассировка стека находится в объекте исключения, и вы всегда можете выбросить свои собственные исключения).

В качестве альтернативы, если вы работаете на симуляторе, ваш собственный «alert ()» может вызвать цель C и отобразить строку в окне консоли симулятора iPhone:

document.location.href = "http://debugger/" + 
   encodeURIComponent(outputString);   

и на стороне объектива C:

//--------------------------------------------------------------------
- (BOOL)webView:(UIWebView*)webView 
       shouldStartLoadWithRequest: (NSURLRequest*)req 
       navigationType:(UIWebViewNavigationType)navigationType {
    if ([[[req URL] host] isEqualToString:@"debugger"]){
        // do stuff with [[req URL] path] 
       }
}

Тем не менее, у меня есть приложение, которое тяжело работает с UiWebView / javascript, и я склонен выполнять большинство javascript dev в Chrome (имитируя то, что необходимо из среды iPhone)

6 голосов
/ 16 марта 2011

Я еще не пробовал, но взгляните на это Weinre

Выглядит очень многообещающе.

4 голосов
/ 21 января 2015

Это старый вопрос. Но я все еще хотел бы поделиться своими двумя центами.

Я использовал jsconsole.com для удаленной отладки. Это просто. Просто включите тег сценария и используйте журналы консоли для отладки с помощью печати. Это также можно использовать для отладки на реальном устройстве.

3 голосов
/ 19 марта 2019

Я получаю отличный способ отладки UIWebView Или SFSafariViewController .

Надеюсь, это поможет.

Шаг 1: Откройте Safari VC на вашем Mac (хахаха, не делайте свое лицо, если я говорю в вашем Macbook, просто следуйте моим инструкциям)

Шаг 2: Перейдите в настройки Safari и нажмите кнопку «Вперед». Вы получите эту настройку на экране MacBook.

enter image description here

Теперь включите меню Показать для разработки в строке меню. Теперь Ваша Вся работа выполнена. Вы думаете, я шучу: P: P нет человека ...

Шаг 3: Запустите приложение в устройстве или симуляторе. (Не думай, просто запусти) И зайди в свое приложение, где открываешь свой Webview или SFSafariViewController. До сих пор вы не поняли, я знаю. Будь крут и увидишь мой следующий шаг.

Шаг 4: Откройте Safari в MacBook и нажмите «Разработать вариант» в строке меню. Вы получили что-то, что ваш MacBook, iPad / iPhone показывает правильно ?????

enter image description here

Шаг 5: Готово. щелкните свое устройство и нажмите на URL. Появится новое всплывающее окно. enter image description here

Step6: что ты сейчас смотришь, здесь все шаги.

Теперь отладьте вашу веб-страницу на этой консоли. Будьте счастливы и наслаждайтесь своим днем, занимаясь кодированием С чашкой чая или Кофе.

IMP: Не забудьте включить See Below Image enter image description here

3 голосов
/ 13 сентября 2017

Старый вопрос, но я думаю, что нашел лучшее решение, в моем случае вам нужно отладить uiwebview, но у меня не было доступа к приложению IOS и только к html-контенту, и мне пришлось просматривать некоторые журналы JS, я добавил следующий код, чтобы загрузить легкий firebug JS и показать его автоматически:

звонит с JS

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://getfirebug.com/firebug-lite-debug.js';
document.head.appendChild(script);

или загрузите его из HTML

<script type="text/javascript" src="https://getfirebug.com/firebug-lite-debug.js"></script>
0 голосов
/ 21 мая 2010

Вы можете настроить систему, подобную той, которая используется в PhoneGap для отправки сообщений из JavaScript в Objective-C и входа оттуда. В двух словах, они устанавливают document.location с пользовательской схемой и блокируют эту схему в обратном вызове делегата.

Вы можете воспользоваться тем фактом, что UIWebView является большинством делегатов для WebView. WebKit технически недокументирован для iPhone, но в основном совпадает с указанным в заголовках настольного WebKit, возможно, включая WebScriptObject. Я использую это для отладки, но обязательно удалите этот код перед отправкой в ​​Apple.

Чтобы получить WebView из UIWebView, реализуйте метод делегата, такой как -(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrame, в подклассе UIWebView. Звоните супер, если вы используете это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...