swift osx webview输入类型=文本不工作

swift osx webview输入类型=文本不工作,swift,macos,Swift,Macos,我以编程方式创建了window和webview 正常单击所有按钮、单选按钮。 但如果我点击输入,并想键入文本,它不是点击。光标更改,但焦点不在输入中。键盘不能打字。 输入上的右键工作正常,我可以在其中粘贴文本 // // WindowCommand.swift // DeskAlerts // // Created by mihail on 26/04/2017. // Copyright © 2017 Toolbarstudio Inc. All rights reserved. /

我以编程方式创建了window和webview

正常单击所有按钮、单选按钮。 但如果我点击输入,并想键入文本,它不是点击。光标更改,但焦点不在输入中。键盘不能打字。 输入上的右键工作正常,我可以在其中粘贴文本

//
//  WindowCommand.swift
//  DeskAlerts
//
//  Created by mihail on 26/04/2017.
//  Copyright © 2017 Toolbarstudio Inc. All rights reserved.
//

import Foundation
import Cocoa
import SINQ
import WebKit
extension NSCoder {
    class func empty() -> NSCoder {
        let data = NSMutableData()
        let archiver = NSKeyedArchiver(forWritingWith: data)
        archiver.finishEncoding()
        return NSKeyedUnarchiver(forReadingWith: data as Data)
    }
}



class WindowCommand:NSViewController, WebFrameLoadDelegate, WebUIDelegate, WebEditingDelegate, WebPolicyDelegate, WebDownloadDelegate, WebResourceLoadDelegate
{
    var Coder: NSCoder?

    var Window: NSWindow?

    init() {
        Coder = NSCoder.empty()
        super.init(coder: Coder!)!
        InitParentWindow()
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func InitParentWindow()
    {
        let rect = NSRect.init(x: 0.0, y: 0.0, width: 500.0 , height: 500.0)
        Window = NSWindow(contentRect: rect , styleMask: NSWindowStyleMask.borderless, backing: NSBackingStoreType.retained, defer: false, screen: MainScreen)


        Window?.isOpaque = true
        Window?.backgroundColor = NSColor.clear
        Window?.hasShadow = false
        Window?.isReleasedWhenClosed = true
        Window?.acceptsMouseMovedEvents = true
        Window?.allowsConcurrentViewDrawing = true
        Window?.ignoresMouseEvents = false
        Window?.isDocumentEdited = true
        Window?.level = Int(CGWindowLevelForKey(.maximumWindow))
        Window?.makeKeyAndOrderFront(self)
        Window?.contentViewController = self
    }

    func Close()
    {
        Window?.close()
    }


    override func viewDidLoad() {
        super.viewDidLoad()


        let preferences = WebPreferences()
        preferences.allowsAirPlayForMediaPlayback = true
        preferences.allowsAnimatedImageLooping = true
        preferences.allowsAnimatedImages = true
        preferences.arePlugInsEnabled = true
        preferences.autosaves = true
        preferences.cacheModel = WebCacheModel.documentBrowser
        preferences.isJavaEnabled = true
        preferences.isJavaScriptEnabled = true
        preferences.javaScriptCanOpenWindowsAutomatically = true
        preferences.loadsImagesAutomatically = true
        preferences.privateBrowsingEnabled = false
        preferences.shouldPrintBackgrounds = false
        preferences.tabsToLinks = false
        preferences.usesPageCache = false
        preferences.suppressesIncrementalRendering = true

        self.view.frame = NSRect.init(x: 0, y: 0, width: 500, height: 500)
        CaptionBrowser = WebView.init(frame: NSRect.init(x: 0, y: 0, width: 500, height: 500)
        let nillvalue:WebView? = nil
        if (CaptionBrowser != nillvalue)
        {
            CaptionBrowser?.uiDelegate = self
            CaptionBrowser?.frameLoadDelegate = self
            CaptionBrowser?.editingDelegate = self
            CaptionBrowser?.policyDelegate = self
            CaptionBrowser?.resourceLoadDelegate = self
            CaptionBrowser?.downloadDelegate = self
            CaptionBrowser?.windowScriptObject.setValue(HtmlInteropClass(data: Alert!, owner: self), forKey: "external")
            CaptionBrowser?.preferences = preferences
            self.view.addSubview(CaptionBrowser!, positioned: NSWindowOrderingMode.above, relativeTo: nil)


            var url = NSURL(string: (ParentWindowParams?.captionhref)!)
            CaptionBrowser?.mainFrame.load(URLRequest.init(url: (url! as URL) as URL))



            let mainbrowserwidth = 480

            let mainbrowserheight = 150






            MainBrowser = WebView.init(frame: CGRect(x:10 ,y:150, width:480 ,height:150))
            MainBrowser?.uiDelegate = self
            MainBrowser?.frameLoadDelegate = self
            MainBrowser?.editingDelegate = self
            MainBrowser?.policyDelegate = self
            MainBrowser?.resourceLoadDelegate = self
            MainBrowser?.downloadDelegate = self
            MainBrowser?.preferences = preferences
            MainBrowser?.windowScriptObject.setValue(HtmlInteropClass(data: Alert!, owner: self), forKey: "external")

            self.view.addSubview(MainBrowser!, positioned: NSWindowOrderingMode.above, relativeTo: CaptionBrowser)

            let filePath = Bundle.main.path(forResource: "test", ofType: "html", inDirectory: "Resources")
            url = NSURL(string: filePath!)
            MainBrowser?.mainFrame.load(URLRequest.init(url: url! as URL))


            //url = NSURL(string: Alerthref!)
            //MainBrowser?.mainFrame.load(URLRequest.init(url: url! as URL))
        }
    }

    func webView(_ sender: WebView!, createWebViewWith request: URLRequest!) -> WebView! {
        return sender
    }

    func webView(_ webView: WebView!, decidePolicyForNavigationAction actionInformation: [AnyHashable : Any]!, request: URLRequest!, frame: WebFrame!, decisionListener listener: WebPolicyDecisionListener!)
    {

            listener.use()


    }

    func webView(_ webView: WebView!, decidePolicyForNewWindowAction actionInformation: [AnyHashable : Any]!, request: URLRequest!, newFrameName frameName: String!, decisionListener listener: WebPolicyDecisionListener!) {

            listener.use()

    }

    func webView(_ sender: WebView!, runJavaScriptAlertPanelWithMessage message: String!, initiatedBy frame: WebFrame!) {
        print(message)
    }
    func webView(_ sender: WebView!, runJavaScriptTextInputPanelWithPrompt prompt: String!, defaultText: String!, initiatedBy frame: WebFrame!) -> String! {


        return ""
    }

    override func loadView() {
      super.loadView()
    }

    override var representedObject: Any? {
        didSet {
            // Update the view, if already loaded.
        }
    }


}
我发现了一个麻烦。 Window=NSWindow(contentRect:rect,styleMask:NSWindowStyleMask.borderless,backing:NSBackingStoreType.retained,defer:false,screen:MainScreen)

如果我在做财产 样式掩码:NSWindowStyleMask.borderless
输入不可用

你用了什么?请展示你的尝试。就我个人而言,我使用的是WKWebView,效果很好。@EricAya simple webview。不工作。用wkwebview测试-得到了相同的结果。
得到了相同的结果
是的,现在你可以看到你的问题不在webview上。我使用的是WKWebView,它可以正常工作。所以,如果它对你不起作用,那就意味着你有另一个问题,这并不意味着网络视图不起作用。因此,您应该展示您的尝试,展示您的代码,并解释您是如何做的,因为要么您做错了,要么代码库/安装中的其他地方出了问题。@EricAya感谢您的帮助。使用webview添加了代码和图片。单选按钮点击很好。但无法编辑输入((InitParentWindow-creating nswindow.And viewdidload-creatingwebviews@EricAya很抱歉。编辑的代码。它编译,显示视图。除输入外,所有控件都单击。结果-相同。