在本机 safari 应用程序扩展中,我们如何使用 swift 的参数调用 javascript 函数?
Posted
技术标签:
【中文标题】在本机 safari 应用程序扩展中,我们如何使用 swift 的参数调用 javascript 函数?【英文标题】:In Native safari app extension How we can call a javascript function with argumemts from swift? 【发布时间】:2019-02-20 11:09:01 【问题描述】:我只想在我绑定了很多的 safari 应用扩展中的 swift 文件中调用一个 javascript 函数。 我是swift的新手,我不知道该怎么做,请帮帮我:
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]:无法识别的选择器发送到实例
【问题讨论】:
【参考方案1】:我认为Apple documentation 中描述的方式是使用您的主类(即 SafariExtensionHandler 类)在文件中调用 dispatchMessageToScript 函数,并在 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)
【讨论】:
以上是关于在本机 safari 应用程序扩展中,我们如何使用 swift 的参数调用 javascript 函数?的主要内容,如果未能解决你的问题,请参考以下文章
带有 Safari 扩展的 Mac App Store 应用程序