0
我以編程方式創建了窗口和web視圖。swift osx webview input type = text not working
所有按鈕,單選按鈕被點擊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.
}
}
}
你使用了什麼?請顯示你的嘗試。我個人使用WKWebView,它運作良好。 – Moritz
@EricAya簡單的web視圖。不是周。用wkwebview測試 - 得到了同樣的結果。 –
'得到了同樣的結果'好現在你可以看到你的問題不在webview中。我使用WKWebView和*它的作品*。所以,如果它不適合你,這意味着你有另一個問題,這並不意味着webviews不起作用。所以你應該展示你的嘗試,展示你的代碼,並且解釋你是如何做的,因爲你在代碼庫/安裝的其他地方做錯了什麼或者有什麼錯誤。 – Moritz