Я пытаюсь понять, почему что-то с Javascript не работает внутри UIWebView. Насколько мне известно, нет возможности установить точку останова внутри XCode для файла js. Нет проблем, я просто вернусь в 2004 год и воспользуюсь бдительными государственными деятелями - подождите, похоже, они тоже не работают внутри UIWebView!
Единственное, что я мог придумать, - это экспортировать свои файлы HTML и JS на рабочий стол, а затем просто выполнять отладку внутри Safari. И это работает! Но, конечно, ошибка, с которой я борюсь в UIWebView, не возникает в Safari.
Есть ли какие-либо другие способы отладки внутри UIWebView или какие-либо уловки, которые я могу использовать, аналогичные старому методу оповещения?
источник
Settings
>Safari
>Advanced
>Web Inspector
<- включить этоЭтот запрос превосходит Google, поэтому стоит связать его с remoteInspector, скрытым в iOS5 - безусловно, лучший из найденных до сих пор способов отладки UIWebViews - просто условно скомпилируйте перед отправкой в Apple.
источник
[NSClassFromString(@"WebView") performSelector:@selector(_enableRemoteInspector)];
забудьте удалить вызов при сборке для выпуска!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)
источник
Надеюсь, это поможет.
Шаг 1. Откройте Safari VC на вашем Mac (хахаха, не корчите лицо, если я говорю в вашем Macbook, просто следуйте этим моим шагам)
Шаг 2: перейдите в настройки Safari и нажмите «Вперед». Вы получите эту настройку на экране вашего MacBook.
Теперь включите Показать для разработки меню в строке меню. Теперь вся ваша работа сделана. Вы думаете, что я шучу: P: P нет ...
Шаг 3. Запустите приложение на устройстве или в симуляторе. (Не думайте, просто запустите) И войдите в свое приложение, в котором вы открываете свой Webview или SFSafariViewController. До сих пор вы не понимали, я знаю. Успокойся и посмотри на мой следующий шаг.
Шаг 4: Откройте Safari на своем MacBook и нажмите «Разработка» в строке меню. У вас есть что-то, что ваш MacBook, iPad / iPhone отображает правильно ?????
Шаг 5: Готово. щелкните свое устройство и щелкните URL-адрес. Появится новое всплывающее окно.
Шаг 6: что вы смотрите сейчас, все шаги здесь.
IMP: не забудьте включить см. Изображение ниже
источник
Я еще не пробовал, но взгляните на эту Вейнре
Выглядит очень многообещающе.
источник
Это старый вопрос. Но я все равно хочу поделиться своими двумя центами.
Я использую jsconsole.com для удаленной отладки. Это просто. Просто включите тег сценария и используйте журналы консоли для отладки путем печати. Это также можно использовать для отладки на реальном устройстве.
источник
Старый вопрос, но я думаю, что нашел лучшее решение, в моем случае вам нужно отладить 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>
источник
Вы можете настроить систему, подобную той, что используется в PhoneGap, для отправки сообщений из JavaScript в Objective-C и регистрации оттуда. Вкратце, они устанавливают document.location с настраиваемой схемой и блокируют эту схему в обратном вызове делегата.
Вы можете воспользоваться тем фактом, что UIWebView является большинством делегатов для WebView. WebKit технически недокументирован для iPhone, но в основном такой же, как указано в заголовках WebKit рабочего стола, возможно, включая WebScriptObject. Я использую это для отладки, но обязательно удалите этот код перед отправкой в Apple.
Чтобы получить WebView из UIWebView, реализуйте метод делегата, как
-(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrame
в подклассе UIWebView. Назовите супер, если вы его используете.источник