2017-05-26 19 views
0

私はウィンドウとwebviewをプログラムで作成しました。swift osx webview入力タイプ=テキストが機能しない

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簡単なwebview。ないwk。 wkwebviewでテストしました - 同じことがあります。 –

+0

「同じものを持っている」うん、まあ、あなたはあなたの問題がwebviewではないことを知ることができます。私はWKWebViewを使用しています*それは動作します*。それはあなたのために動作しない場合は、別の問題があることを意味し、それはWebviewsが動作しないことを意味するものではありません。だからあなたの試みを示し、あなたのコードを表示し、あなたが何かをやっていることを説明する必要があります。何か間違っているか何かがコードベース/インストールのどこかで間違っているからです。 – Moritz

答えて

0

問題が見つかりました。 ウィンドウ= NSWindowの(contentRect:RECT、styleMask:NSWindowStyleMask.borderlessは、バッキング:NSBackingStoreType.retained、延期:偽、画面:MainScreenを)

私はプロパティ styleMaskを作る場合:NSWindowStyleMask.borderless 入力がフィットネスエクササイズではありません。

関連する問題