Из приведенного выше кода (Extensionbar html) вы, кажется, пишете устаревшее расширение Safari (.safariextz), и оно устарело.См. «Что нового в Safari и WebKit» на WWDC18
. Я рекомендую переписать свой код в расширение приложения Safari, выполнив следующую процедуру, которую можно написать в Swift. Я не знаю, почемунеправильный URL-адрес копируется в буфер обмена в вашем коде, но переписывание кода в результате решит проблему.
Создание проекта расширения приложения
Создание расширения приложения, следуя [Файл] -> [Создать] -> [Project ...], затем выберите [Safari Extension App] в Xcode. Шаблон проекта содержит пример реализации menubar.
Копирование location.href путем нажатия кнопки строки меню
Следующий коддобавит функциональность для копирования location.href при нажатии кнопки строки меню.
Просто вставьте это в SafariExtensionHandler.swift.
class SafariExtensionHandler: SFSafariExtensionHandler {
override func messageReceived(withName messageName: String, from page: SFSafariPage, userInfo: [String : Any]?) {
// WHen injected script calls safari.extension.dispatchMessage, the message will come here
guard let href = userInfo?["href"] as? String else { return }
// Save href to clipboard
NSPasteboard.general.clearContents()
NSPasteboard.general.setString(href, forType: .string)
}
override func toolbarItemClicked(in window: SFSafariWindow) {
// Request injected script a message to send location.href
window.getActiveTab { currentTab in
currentTab!.getActivePage { currentPage in
currentPage!.dispatchMessageToScript(withName: "getHref", userInfo: nil)
}
}
}
}
И вставьте скрипт (script.js) следующим образом.
safari.self.addEventListener("message", function(event) {
console.log("event received");
safari.extension.dispatchMessage("sendHref", { "href": location.href });
});
Рабочий пример
Полный рабочий код здесь, это может помочь вашей работе. Удачи:)
https://github.com/horimislime/safari-extension-menubar-example