2017-05-26 90 views
0

我以编程方式创建了窗口和web视图。swift osx webview input type = text not working

enter image description here

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

// 
// 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. 
     } 
    } 


} 
+1

你使用了什么?请显示你的尝试。我个人使用WKWebView,它运作良好。 – Moritz

+0

@EricAya简单的web视图。不是周。用wkwebview测试 - 得到了同样的结果。 –

+0

'得到了同样的结果'好现在你可以看到你的问题不在webview中。我使用WKWebView和*它的作品*。所以,如果它不适合你,这意味着你有另一个问题,这并不意味着webviews不起作用。所以你应该展示你的尝试,展示你的代码,并且解释你是如何做的,因为你在代码库/安装的其他地方做错了什么或者有什么错误。 – Moritz

回答

0

发现麻烦了。 窗口= NSWindow(contentRect:RECT,styleMask:NSWindowStyleMask.borderless,背衬:NSBackingStoreType.retained,推迟:假,屏幕:MainScreen)

如果我使属性 styleMask:NSWindowStyleMask.borderless 输入不菱。

相关问题