РЕДАКТИРОВАТЬ
Поскольку я разместил вопрос, я нашел еще один рабочий пример Objc (http://mattgemmell.com/2008/02/24/skinnable-cocoa-ui-with-webkit-and-css + источник: http://mattgemmell.com/files/source/skinnableapp.zip)
Это то, что у меня есть сейчас:
webview_obj_from_jsAppDelegate.py
from Foundation import *
from AppKit import *
import objc
class webview_obj_from_jsAppDelegate(NSObject):
interface = objc.IBOutlet()
def applicationDidFinishLaunching_(self, sender):
NSLog("Application did finish launching.")
def awakeFromNib(self):
self.interface.setFrameLoadDelegate_(self)
path = NSBundle.mainBundle().resourcePath() + '/interface/index.html'
self.interface.setMainFrameURL_(path)
self.interface.windowScriptObject().setValue_forKey_(self, 'AppController')
#this is what I suspect to be the problem
def isSelectorExcludedFromWebScript_(self, aSel):
return NO
def showMessage(self, message):
NSLog(message)
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>title</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<meta name="description" content="description">
<meta name="keywords" content="">
</head>
<body>
<input id="message_button" type="button" value="Show Message" onClick="window.AppController.showMessage_('I clicked a button and I liked it');" />
</body>
</html>
Теперь, если я добавлю селектор в isSelectorExcludedFromWebScript_ следующим образом:
def isSelectorExcludedFromWebScript_(self, aSel):
if aSel is objc.selector(self.showMessage, signature = 'v@:'):
return NO
нажатие кнопки HTML дает мне эту ошибку:
WebKit discarding exception: <OC_PythonException> <type 'exceptions.ValueError'>: isSelectorExcludedFromWebScript:: returned None, expecting a value
КОНЕЦ РЕДАКТИРОВАТЬ
Я пытаюсь вызвать функцию PyObjc из javascript, но не могу заставить ее работать. Я нашел рабочий пример (https://github.com/ryanb/cocoa-web-app-example), написанный на Objc, но не смог его перевести.
Пару дней назад я наткнулся на это (http://stackoverflow.com/questions/2288582/embedded-webkit-script-callbacks-how), которое сложнее. Излишне говорить, что я не мог заставить его работать.
Так что, если у кого-нибудь есть простой пример (pyobjc & js), я был бы очень признателен, если бы вы мне его показали.