【问题标题】:pyobjc webuidelegate functions not calledpyobjc webidelegate 函数未调用
【发布时间】:2013-02-05 18:09:29
【问题描述】:

我已将我的 WebView UIDelegate 链接到界面构建器中的 BrowserWindowController,这是我实现 webuidelegate 功能的委托。在我的 browserwindowcontroller 类中,我也这样做:

类 BrowserWindowController(NSWindowController):

webView = objc.IBOutlet()

def windowDidLoad(self):
    self.webView.setUIDelegate_(self)

def webViewDidStartLoad_(self, webView):
    print "DID LOAD START"

def webView_didFailLoadWithError_(self, webView, error):
    print "ERROR"

def webViewDidFinishLoad_(self, webView):
    print "DID FINISH LOAD"

 def webView_shouldStartLoadWithRequest_navigationType_(self, webView, request, nav_type):
    print "LOAD REQ"

最后四个函数都没有被调用,它们是 WebUIDelegate 的一部分。我什至尝试过(什么是正式协议,即使这是非正式的): 类 BrowserWindowController(NSWindowController, WebKit.protocols.WebUIDelegate):

但这不起作用。我已经以相同的方式实现了 WebView WebPolicyDelegate 并且它确实有效。为什么 WebUIDelegate 不起作用?我已经按照我在文档中阅读的方式链接了它。我错过了这个非正式协议的内容吗?

【问题讨论】:

  • 你知道如何解决这个问题吗?我也面临同样的问题。

标签: webview pyobjc


【解决方案1】:

根据 Apple 的文档 (1),委托协议没有名为 webviewDidStartLoad: 的选择器。选择器是“UIWebViewDelegate”协议,但它用于 iOS,而不是 OSX。

1:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/WebKit/Protocols/WebUIDelegate_Protocol/Reference/Reference.html

【讨论】:

  • 谢谢。即便如此,我实现了所有的 webuidelegate 函数,但它们都没有处理 window.open(url, "_blank") 的按钮单击,其中 url 是必须打开的文件。单击相同的按钮将打开google.com,没有发送任何事件,但它不会打开我的文件的网址。有任何想法吗?我已经实现了 policydelegate 并且它不响应打开。
  • 一个 WebPolicyDelegate 应该可以解决问题:developer.apple.com/library/mac/#documentation/Cocoa/Reference/…>
猜你喜欢
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
相关资源
最近更新 更多