Как я могу представить функцию Objective C для JavaScript с помощью WebKit на Mac OS X? - PullRequest
3 голосов
/ 11 мая 2010

Я понимаю, что для этого на iPhone вам нужно перехватывать запросы на ссылку (согласно моему другому вопросу iPhone UIWebView Expose JavaScript ), и вы можете легко сделать обратное и получить доступ к JavaScript из кода Obj-C.

Однако я хотел бы, чтобы JavaScript мог вызывать некоторые функции Objective C, которые каким-то образом были бы зарегистрированы в WebKit. Я предполагаю, что вы можете сделать это лучше, чем перехватывать ссылки, как на iPhone, так как в Mac OS X у нас есть доступ к полной версии WebKit.

Я бы хотел сделать наоборот Использование JavaScript из Objective-C

Обновление: Например, можно ли представить метод target-c в JavaScript, например self.external.objcmethod ();

Ответы [ 3 ]

6 голосов
/ 12 мая 2010

Посмотрите на мой ответ на этот вопрос , что очень похоже. Я предоставляю код, который показывает вам, как делать то, что вы хотите.

По сути, вам необходимо реализовать протокол WebScripting согласно документации .

Вам не нужно определять свой собственный обработчик схемы URL, который необходим только для приложений iPhone. На Mac объект WebView на много порядков мощнее, чем UIWebView на iPhone, и позволяет полностью соединяться от JavaScript до Objective-C и наоборот.

0 голосов
/ 11 мая 2010

То, как я делал это в прошлом, - это реализация моей собственной схемы URL. На ваших HTML-страницах вы будете создавать ссылки типа myapp://dosomefunction?aParameter=aValue. Mac OS X откроет ваше приложение (если оно еще не запущено) и передаст ему URL, когда вы нажмете эти ссылки. Это немного удобнее, чем перехват запросов, и будет работать с любым веб-представлением в любом месте системы.

См. Принятый ответ на этот вопрос , чтобы узнать, как настроить обработчик. К сожалению, это односторонняя операция. Вы не сможете получить какие-либо возвращаемые значения из приложения.

0 голосов
/ 11 мая 2010

Вы можете перейти к «javascript: my_method ()» и перехватить загрузку ...

Посмотрите на UIWebViewDelegate делегата.

Документация на http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIWebViewDelegate_Protocol/Reference/Reference.html

Посмотрите на метод shouldStartLoadWithRequest
(* 1 010 *)

Дополнительно вы можете посмотреть на https://dev.mobileread.com/trac/webkitbrowser/browser/trunk/WebKit-r30377/WebKit/qt/Api/qwebframe.cpp#L167

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