Я использую вызовы какао, чтобы установить webView: managePolicyForNavigationAction: request: frame: SolutionListener:
С помощью этого обратного вызова я могу расшифровать, что делать со ссылками, по которым щелкнул пользователь.Но, к сожалению, если есть какой-то iframe внутри, я не получаю обратный вызов для ссылок внутри iframe.
Я попытался использовать findFrameNamed: функцию, чтобы получить webFrame iframe (кажется, работает), а затемполучить базовый веб-вид для установки там SolutionListener, но он не срабатывает.
Любые подсказки?
PS.Я использую PureBasic, вызывая функции Какао вручную.Поэтому я могу добавить свой код PB только в том случае, если это поможет:
Global appDelegate = CocoaMessage(0, CocoaMessage(0, 0, "NSApplication sharedApplication"), "delegate")
Global delegateClass = CocoaMessage(0, appDelegate, "class")
ProcedureC PolicyDecisionMaker(obj, sel, webView, actionInformation, request, frameName, listener)
; handle all links like it is _blank target. We do not want something else in regify client.
Protected URL = CocoaMessage(0, request, "URL")
Protected URLText.s = PeekS(CocoaMessage(0, CocoaMessage(0, URL, "absoluteString"), "UTF8String"), -1, #PB_UTF8)
Debug "URL: " + URLText.s
EndProcedure
class_addMethod(delegateClass,
sel_registerName("webView:decidePolicyForNavigationAction:request:frame:decisionListener:"),
@PolicyDecisionMaker(),
"v@:@@@@@")
Procedure.i SetMacWebgadgetTargetSupport(WebgadgetID.i, iFrameName.s = "")
If iFrameName.s = ""
CocoaMessage(0, GadgetID(WebgadgetID.i), "setPolicyDelegate:", appDelegate)
ProcedureReturn #True
EndIf
Protected macMainFrame = CocoaMessage(0, GadgetID(WebgadgetID), "mainFrame")
Protected maciFrameView = CocoaMessage(0, macMainFrame, "findFrameNamed:$", @iFrameName.s); get iframe
If maciFrameView <> 0
; Set appDelegate on the given iFrame
Protected macWebView = CocoaMessage(0, maciFrameView, "webView") ; get webView object
CocoaMessage(0, macWebView, "setPolicyDelegate:", appDelegate)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Вышеприведенное прекрасно работает на обычном HTML (например, file: //somefile.html).Но это не удается для iFrame со ссылками внутри.