首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在本地safari应用程序扩展中,我们如何调用javascript函数?

在本地safari应用程序扩展中,我们如何调用javascript函数?
EN

Stack Overflow用户
提问于 2019-02-20 11:09:01
回答 1查看 700关注 0票数 0

我只想在safari应用程序扩展名中调用一个快速文件中的javascript函数,我经常打结。我是新来的,我不知道该怎么做,请帮帮我:

代码语言: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:发送到实例的未识别选择器

EN

回答 1

Stack Overflow用户

发布于 2019-12-30 06:46:58

我认为在苹果文档中描述它的方式是使用主类调用文件中的dispatchMessageToScript函数,也就是SafariExtensionHandler类,并在javascript文件上设置一个侦听器来侦听发送的消息并根据消息对其进行操作。

因此,带有主类的文件(在我的例子中是SafariExtensionHandler.swift)将如下所示。

代码语言:javascript
复制
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文件看起来会像这样。

代码语言: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)
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54784898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档