Итак, покопавшись во всем этом. Этот ответ даст вам указание на то, как этого добиться. Если вы посмотрите на ContextMenu
, отображаемый MonaEditor в любом браузере, он всегда обрезан областью просмотра.
Теперь это потому, что контекстное меню основано на HTML, который ограничен пределами области просмотра.
Так почему же VSCode может отображать меню вне ViewPort?
Это потому, что у Electron есть возможность отображать собственные меню. VSCode отключает собственное меню Монако и создает собственное меню при щелчке правой кнопкой мыши. Вы можете увидеть ниже модуль npm, который показывает, как
https://github.com/mixmaxhq/electron-editor-context-menu
Теперь, когда вы используете WKWebView, вы не можете использовать электронные функции, поэтому это означает, что вам нужно будет встроить обработчик контекста в свой код Swift. Ниже приведены некоторые темы SO, которые укажут вам правильное направление.
Как контекст изменить или переопределить меню в WKWebView на Mac?
Поймать событие Javascript в iOS WKWebview с помощью Swift
Я создал приложение Какао с приведенным ниже кодом, чтобы просто убедиться, что подход будет работать.
//
// ViewController.swift
// WebViewTEst
//
// Created by Tarun Lalwani on 4/8/18.
// Copyright © 2018 Tarun Lalwani. All rights reserved.
//
import Cocoa
import WebKit
class ViewController: NSViewController {
@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let url = "https://microsoft.github.io/monaco-editor/"
let prefs = self.webView.configuration.preferences
prefs.javaScriptEnabled = true
prefs.plugInsEnabled = true
self.webView.customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5"
self.webView.configuration.preferences.setValue(true, forKey: "developerExtrasEnabled")
self.webView.load(URLRequest(url: URL(string: url)!))
// Do any additional setup after loading the view.
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
}
А затем отключил контекстное меню по умолчанию monaco, запустив editor.updateOptions({contextmenu: false})
, и после этого контекстное меню, показанное в редакторе, стало родным. Теперь это то, что вам нужно настроить из собственного кода.
person
Tarun Lalwani
schedule
08.04.2018