# Copyright (c) 2013 CEF Python, see the Authors file.# All rights reserved. Licensed under BSD 3-clause license.# Project website: https://github.com/cztomczak/cefpythoninclude "cefpython.pyx"cdef int g_pythonCallbackMaxId = 0# [callbackId] = (browserId, frameId, func)cdef dict g_pythonCallbacks = {}# TODO: send callbackId using CefBinaryNamedValue, see:# http://www.magpcss.org/ceforum/viewtopic.php?f=6&t=10881cdef struct PythonCallback:int callbackIdchar uniqueCefBinaryValueSize[16]cdef CefRefPtr[CefBinaryValue] PutPythonCallback(object browserId,object frameId,object func) except *:global g_pythonCallbacksglobal g_pythonCallbackMaxIdif not browserId:raise Exception("PutPythonCallback() FAILED: browserId is empty")if not frameId:raise Exception("PutPythonCallback() FAILED: frameId is empty")cdef PythonCallback pyCallbackg_pythonCallbackMaxId += 1pyCallback.callbackId = g_pythonCallbackMaxIdcdef CefRefPtr[CefBinaryValue] binaryValue = CefBinaryValue_Create(&pyCallback, sizeof(pyCallback))g_pythonCallbacks[g_pythonCallbackMaxId] = (browserId, frameId, func)return binaryValuecdef public void RemovePythonCallbacksForFrame(object frameId) except * with gil:# Cannot remove elements from g_pythonCallbacks (dict) while iterating.cdef list toRemove = []try:global g_pythonCallbacksfor callbackId, value in g_pythonCallbacks.iteritems():if value[1] == frameId:toRemove.append(callbackId)for callbackId in toRemove:del g_pythonCallbacks[callbackId]Debug("RemovePythonCallbacksForFrame(): " \"removed python callback, callbackId = %s" \% callbackId)except:(exc_type, exc_value, exc_trace) = sys.exc_info()sys.excepthook(exc_type, exc_value, exc_trace)cdef void RemovePythonCallbacksForBrowser(int browserId) except *:cdef list toRemove = []global g_pythonCallbacksfor callbackId, value in g_pythonCallbacks.iteritems():if value[0] == browserId:toRemove.append(callbackId)for callbackId in toRemove:del g_pythonCallbacks[callbackId]Debug("RemovePythonCallbacksForBrowser(): " \"removed python callback, callbackId = %s" \% callbackId)cdef public cpp_bool ExecutePythonCallback(CefRefPtr[CefBrowser] cefBrowser,int callbackId,CefRefPtr[CefListValue] cefFuncArgs,) except * with gil:cdef object funccdef list funcArgscdef object returnValuetry:global g_pythonCallbacksif callbackId in g_pythonCallbacks:func = g_pythonCallbacks[callbackId][2]funcArgs = CefListValueToPyList(cefBrowser, cefFuncArgs)func(*funcArgs)return Trueelse:Debug("ExecutePythonCallback() FAILED: callback not found, " \"callbackId = %s" % callbackId)return Falseexcept:(exc_type, exc_value, exc_trace) = sys.exc_info()sys.excepthook(exc_type, exc_value, exc_trace)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。