我只想在safari应用程序扩展名中调用一个快速文件中的javascript函数,我经常打结。我是新来的,我不知道该怎么做,请帮帮我:
import SafariServices
import JavaScriptCore
import WebKit
class SafariExtensionHandler: SFSafariExtensionHandler,WKNavigationDelegate {
override func messageReceived(withName messageName: String, from page: SFSafariPage, userInfo: [String : Any]?) {
// This method will be called when a content script provided by your extension calls safari.extension.dispatchMessage("message").
SFSafariApplication.getActiveWindow { (window) in
window?.getActiveTab { (tab) in
tab?.getActivePage(completionHandler: { (page1) in
page1?.webFrame.javaScriptContext.evaluateScript("myFunction('123')");
})
}
}
}
}我正在犯错误:
SFSafariPage webFrame:发送到实例的未识别选择器
发布于 2019-12-30 06:46:58
我认为在苹果文档中描述它的方式是使用主类调用文件中的dispatchMessageToScript函数,也就是SafariExtensionHandler类,并在javascript文件上设置一个侦听器来侦听发送的消息并根据消息对其进行操作。
因此,带有主类的文件(在我的例子中是SafariExtensionHandler.swift)将如下所示。
import SafariServices
class SafariExtensionHandler: SFSafariExtensionHandler {
override func messageReceived(withName messageName: String, from page: SFSafariPage, userInfo: [String : Any]?) {
// This method will be called when a content script provided by your extension calls safari.extension.dispatchMessage("message").
if messageName == "GetWebsiteUrl" {
page.dispatchMessageToScript(withName: "WebsiteUrl")
}
}
}你要注入的javascript文件看起来会像这样。
// Wait for the DOM to load before dispatching a message to the app extension's Swift code.
document.addEventListener("DOMContentLoaded", function(event) {
safari.extension.dispatchMessage("GetWebsiteUrl");
});
// Listens for messages sent from the app extension's Swift code.
safari.self.addEventListener("message", messageHandler);
function messageHandler(event) {
if(event.name === "WebsiteUrl"){
console.log("WebsiteUrl >>>", document.URL)
}
}https://stackoverflow.com/questions/54784898
复制相似问题