WebView: решение не работает для iframe - PullRequest
0 голосов
/ 12 ноября 2018

Я использую вызовы какао, чтобы установить 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 со ссылками внутри.

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