Вы нашли старую статью, написанную для древнего WebView
macOS, а не для WKWebView
.
Вы используете WKScriptMessageHandler
для создания взаимодействия между JavaScript и Swift, когда используете WKWebView
.
ViewController.swift:
import WebKit
class ViewController: NSViewController, WKUIDelegate {
@IBOutlet weak var wkWebView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let url = Bundle.main.url(forResource: "index", withExtension: "html")! //Simplified for testing
let request = URLRequest(url: url)
wkWebView.configuration.preferences.javaScriptEnabled = true
wkWebView.configuration.userContentController.add(self, name: "mySwiftMessage") //<-
wkWebView.load(request)
}
//...
}
extension ViewController: WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
switch message.name {
case "mySwiftMessage":
if let callbackName = message.body as? String {
message.webView?.evaluateJavaScript("\(callbackName)('Hello From Swift');", completionHandler: nil)
}
default:
break
}
}
}
index. Вам просто нужно создать его программно:
import WebKit
class ViewController: UIViewController, WKUIDelegate {
var wkWebView: WKWebView! //<- NOT an IBOutlet
override func viewDidLoad() {
super.viewDidLoad()
let webConfig = WKWebViewConfiguration()
webConfig.preferences.javaScriptEnabled = true
webConfig.userContentController.add(self, name: "mySwiftMessage")
wkWebView = WKWebView(frame: self.view.bounds, configuration: webConfig)
view.addSubview(wkWebView)
//You may need to add some constraints...
//And create a better `index.html` for iOS...
let url = Bundle.main.url(forResource: "index", withExtension: "html")!
let request = URLRequest(url: url)
wkWebView.load(request)
}
//...
}
http://www.freedesktop.org/wiki/Specifications является, вероятно, хорошим местом для запуска. Я нахожу, что они довольно трудно следуют большую часть времени, но иногда можно понять это. А именно, "Настольная Спецификация Записи".
Кроме того, я не думаю, что Вы сможете использовать любые псевдонимы от .bashrc
, по крайней мере, не пишущий некоторый сценарий обертки. Я думаю, что это должен быть исполняемый файл. Конечно, Вы могли просто использовать старые добрые символьные ссылки - для - то же + what's-мой - прием имени...
(Который, для ссылки, идет как это:
Некоторое случайное расследование показывает, что создание их довольно просто при использовании Наутилуса (по крайней мере, версия, я имею):
xterm -e 'bash -c "unzip -l %f; sleep 5"'
rm -rf
)~/.local/share/applications/
названный xterm-usercreated.desktop
Здесь, по крайней мере, я получаю следовать файл:
[Desktop Entry]
Encoding=UTF-8
Name=xterm
MimeType=application/zip;
Exec=xterm -e 'bash -c "unzip -l %f; sleep 5"' %f
Type=Application
Terminal=false
NoDisplay=true
4: Рассмотрение системы xterm .desktop я нахожу это:
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=XTerm
GenericName=
Comment=XTerm: terminal emulator for X
Icon=/usr/share/pixmaps/xterm-color_32x32.xpm
Exec=xterm
Terminal=false
Categories=X-Debian-Applications-Terminal-Emulators;
5: Редактирование .usercreated.desktop файла к этому:
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=xtermz
Exec=xterm -e 'bash -c "unzip -l %f; sleep 5"' %f
Terminal=false
Categories=X-Local-WTF
6: Выполненный xdg-desktop-menu forceupdate - пользователь режима
7: "xtermz" теперь обнаруживается в списке... Успех!
8:Фу! Это также заставляет его появиться в главном меню под "Другим". Странный!
xdg-desktop-menu
и друзья (особенно xdg-icon-resource
) живой в xdg-utils
пакет..desktop
зарегистрируйте с нуля..desktop
использование файла xdg-desktop-menu install
и тому подобноеЯ не мог получить работу псевдонимов, таким образом, я сделал это вместо этого:
Созданный сценарий оболочки, чтобы сделать то, что я хочу и помещаю его в свой домашний dir
Поместите ссылку на мой сценарий оболочки в/usr/bin:
Работает!
Я не мог заставить псевдонимы работать, поэтому я сделал это вместо этого:
Создал сценарий оболочки, чтобы делать то, что я хочу, и поместил его в свой домашний дир
Поместите ссылку на мой скрипт оболочки в /usr/bin:
например, sudo ln -s ~/bin/MyShellScript.sh /usr/bin/MyShortcutName
Оно работает!
Это работает, потому что /usr/bin находится в переменной пути. лучшей альтернативой было бы создать скрытый каталог в вашем доме, например ~/.scripts/
, а затем добавить этот каталог в свой путь. Теперь вы можете поместить все свои скрипты в эту реж.