Я работаю над приложением, в котором я собираюсь использовать как HTML5 в UIWebView, так и собственную платформу iOS. Я знаю, что могу реализовать связь между JavaScript и Objective-C. Существуют ли библиотеки, упрощающие реализацию этого взаимодействия? Я знаю, что существует несколько библиотек для создания собственных приложений iOS на HTML5 и javascript (например, AppMobi, PhoneGap), но я не уверен, есть ли библиотека, помогающая создавать собственные приложения iOS с интенсивным использованием JavaScript. Мне нужно:
- Выполнять JS-методы из Objective-C
- Выполнение методов Objective-C из JS
- Слушайте собственные события JS от Objective-C (например, событие готовности DOM)
javascript
ios
html
uiwebview
andr111
источник
источник
Ответы:
Есть несколько библиотек, но я не использовал ни одну из них в больших проектах, так что вы можете попробовать их:
-
Тем не менее, я думаю, что это что-то достаточно простое, чтобы вы могли попробовать сами. Я лично делал именно это, когда мне нужно было это сделать. Вы также можете создать простую библиотеку, которая соответствует вашим потребностям.
1. Выполните методы JS из Objective-C
На самом деле это всего лишь одна строчка кода.
Подробнее в официальной документации UIWebView .
2. Выполнение методов Objective-C из JS.
К сожалению, это немного сложнее, потому что не существует того же свойства (и класса) windowScriptObject, которое существует в Mac OSX, обеспечивающего полную связь между ними.
Тем не менее, вы можете легко позвонить с пользовательских URL-адресов javascript, например:
И перехватите его из Objective-C с помощью этого:
Это не так чисто, как должно быть (или при использовании windowScriptObject), но работает.
3. Слушайте собственные JS-события из Objective-C (например, событие готовности DOM)
Из приведенного выше объяснения вы видите, что если вы хотите это сделать, вам нужно создать некоторый код JavaScript, прикрепить его к событию, которое вы хотите отслеживать, и вызвать правильный
window.location
вызов, который будет затем перехвачен.Опять не чисто, как должно быть, но работает.
источник
Предлагаемый метод вызова цели c из JS в принятом ответе не рекомендуется. Один из примеров проблем: если вы сделаете два последовательных вызова сразу же, один будет проигнорирован (вы не можете изменить местоположение слишком быстро).
Я рекомендую следующий альтернативный подход:
Вы вызываете
execute
функцию несколько раз, и поскольку каждый вызов выполняется в собственном iframe, их нельзя игнорировать при быстром вызове.Кредиты этому парню .
источник
Обновление: это изменилось в iOS 8. Мой ответ относится к предыдущим версиям.
Альтернативный вариант, который может привести к отказу в доступе в магазине приложений, - использовать WebScriptObject.
Эти API-интерфейсы общедоступны в OSX, но отсутствуют в iOS.
Вам необходимо определить интерфейсы для внутренних классов.
Вам необходимо определить свой объект, который будет служить вашим WebScriptObject.
Теперь установите этот экземпляр в свой UIWebView
Теперь внутри вашего javascript вы можете вызвать:
источник
В iOS8 вы можете посмотреть WKWebView вместо UIWebView . У него есть следующий класс: WKScriptMessageHandler: предоставляет метод для получения сообщений от JavaScript, запущенного на веб-странице.
источник
WKWebView
имеет много проблем, включая неправильную обработку файлов cookie. Просто предупреждение для всех, кто приходит сюда, думая, что это решит все ваши проблемы - немного погуглите, прежде чем принять его.Это возможно с iOS7, оформить заказ http://blog.bignerdranch.com/3784-javascriptcore-and-ios-7/
источник
Ваш лучший выбор - это предложение Appcelerators Titanium. Они уже построили мост javascript Obj-C, используя
движокJavascriptCoreV8, используемый webkit. Это также открытый исходный код, поэтому вы сможете скачать его и поработать с Obj-C, как вам нравится.источник
Взгляните на проект KirinJS: Kirin JS, который позволяет использовать Javascript для логики приложения и собственного пользовательского интерфейса, соответствующего платформе, на которой он работает.
источник
Я создал такую библиотеку, как WebViewJavascriptBridge, но она больше похожа на JQuery, проще в установке и использовании. Не полагается на jQuery (хотя, к его чести, если бы я знал, что WebViewJavascriptBridge существует до того, как писать это, я, возможно, просто немного сдержался, прежде чем погрузиться в него). Дайте мне знать, что вы думаете! jockeyjs
источник
Если вы используете WKWebView на iOS 8, обратите внимание на XWebView, который может автоматически открывать собственный интерфейс для javascript.
источник