Доступ искажает в Gnome “Запущенное Приложение” диалоговое окно

Вы нашли старую статью, написанную для древнего 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)
    }

    //...
}
8
задан Brad Parks 9 October 2008 в 14:28
поделиться

3 ответа

http://www.freedesktop.org/wiki/Specifications является, вероятно, хорошим местом для запуска. Я нахожу, что они довольно трудно следуют большую часть времени, но иногда можно понять это. А именно, "Настольная Спецификация Записи".

Кроме того, я не думаю, что Вы сможете использовать любые псевдонимы от .bashrc, по крайней мере, не пишущий некоторый сценарий обертки. Я думаю, что это должен быть исполняемый файл. Конечно, Вы могли просто использовать старые добрые символьные ссылки - для - то же + what's-мой - прием имени...

(Который, для ссылки, идет как это:

  1. Сделайте сценарий, который использует его собственное имя в качестве параметра.
  2. Сделайте символьные ссылки на упомянутый сценарий с помощью значений параметров в качестве названий ссылки.)

Исследование...

Некоторое случайное расследование показывает, что создание их довольно просто при использовании Наутилуса (по крайней мере, версия, я имею):

  1. Поднимите контекстное меню для некоторого случайного файла, и использование "Открывает With"-> "Открытый с Другим Приложением".
  2. Разверните "Использование пользовательская команда" и введите в чем-то как:
    1. xterm -e 'bash -c "unzip -l %f; sleep 5"'
  3. Это приводит к
    1. выполняемая команда (так не вводят rm -rf)
    2. файл в ~/.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:Фу! Это также заставляет его появиться в главном меню под "Другим". Странный!


Некоторые примечания:

  • В моем Debian/testing, xdg-desktop-menu и друзья (особенно xdg-icon-resource) живой в xdg-utils пакет.
  • Необходимо смочь создать a .desktop зарегистрируйте с нуля.
  • Необходимо смочь установить .desktop использование файла xdg-desktop-menu install и тому подобное
4
ответ дан 5 December 2019 в 17:43
поделиться

Я не мог получить работу псевдонимов, таким образом, я сделал это вместо этого:

  • Созданный сценарий оболочки, чтобы сделать то, что я хочу и помещаю его в свой домашний dir

  • Поместите ссылку на мой сценарий оболочки в/usr/bin:

    • например, sudo ln-s ~/bin/MyShellScript.sh/usr/bin/MyShortcutName

Работает!

1
ответ дан 5 December 2019 в 17:43
поделиться

Я не мог заставить псевдонимы работать, поэтому я сделал это вместо этого:

Создал сценарий оболочки, чтобы делать то, что я хочу, и поместил его в свой домашний дир Поместите ссылку на мой скрипт оболочки в /usr/bin: например, sudo ln -s ~/bin/MyShellScript.sh /usr/bin/MyShortcutName Оно работает!

Это работает, потому что /usr/bin находится в переменной пути. лучшей альтернативой было бы создать скрытый каталог в вашем доме, например ~/.scripts/

, а затем добавить этот каталог в свой путь. Теперь вы можете поместить все свои скрипты в эту реж.

1
ответ дан 5 December 2019 в 17:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: