Каковы некоторые методы для отладки Javascript внутри UIWebView?
Я пытаюсь понять, почему что-то с Javascript не работает внутри UIWebView. Насколько я знаю, нет способа установить точку останова внутри XCode для js файла. Нет проблем, я просто вернусь к 2004 году и использую предупреждающие статуты - о, если они не работают внутри UIWebView!
Единственное, о чем я мог думать, это экспортировать мои файлы HTML и JS на рабочий стол, а затем просто выполнить мою отладку внутри Safari. И это работает! Но, конечно, ошибка, с которой я сражаюсь в UIWebView, не встречается в Safari.
Есть ли другие способы отладки внутри UIWebView или любые трюки, которые я могу использовать с помощью метода предупреждения о старой школе?
Ответы
Ответ 1
Если вы используете iOS >= 6, и у вас есть горный лев (10.8) или Safari >= 6, вы можете просто:
- Откройте приложение в симуляторе (или ваше устройство в XCode >= 4.5.x).
- Откройте Safari (перейдите к
Preferences -> Advanced
и убедитесь, что в меню "Показать меню разработки в меню" включено.
- На панели меню (Safari) выберите
Develop -> iPhone Simulator -> [your webview page]
.
Что это!
Ответ 2
Этот запрос подходит для Google, поэтому стоит привязать к remoteInspector, спрятанному в iOS5 - безусловно, лучший способ найти отладочную версию UIWebViews - просто условная компиляция перед отправкой в Apple.
Ответ 3
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-разработчиков в Chrome (имитируя то, что необходимо в среде iPhone).
Ответ 4
Я еще не пробовал этого, но посмотрите на это Weinre
Выглядит очень многообещающе.
Ответ 5
Это старый вопрос. Но я по-прежнему хочу поделиться своими двумя центами.
Я использовал jsconsole.com для удаленной отладки. Это легко. Просто добавьте тег script и используйте консольные журналы для отладки путем печати. Это также можно использовать для отладки на реальном устройстве.
Ответ 6
Старый вопрос, но я думаю, что нашел лучшее решение, в моем случае вам нужно отлаживать 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>
Ответ 7
Вы можете настроить систему, используемую в PhoneGap, чтобы отправлять сообщения с JavaScript на Objective-C и регистрироваться оттуда. В двух словах они устанавливают document.location с помощью специальной схемы и блокируют эту схему в обратном вызове делегата.
Вы можете воспользоваться тем фактом, что UIWebView является большинством делегатов для WebView. WebKit технически недокументирован для iPhone, но в основном такой же, как указано в заголовках WebKit на рабочем столе, возможно, включая WebScriptObject. Я использую это для отладки, но обязательно удалите этот код перед отправкой в Apple.
Чтобы получить WebView из UIWebView, реализуйте метод делегата типа -(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrame
в подклассе UIWebView. Позвоните супер, если вы используете этот.