代码之家  ›  专栏  ›  技术社区  ›  moghya

如何在safari应用程序和从safari应用程序扩展资源文件夹加载的html页面之间进行通信

  •  1
  • moghya  · 技术社区  · 6 年前

    我正在尝试构建一个简单的safari应用程序扩展。打开 about:blank 我从扩展名为resources的文件夹加载一个html页面。下面是代码。

    //script.js - injected script
    if(window.location.href=="about:blank"){
        window.location.href = safari.extension.baseURI + "page.html";
    }
    

    注入的脚本 script.js 在加载的html页上不可用 .

    我试着把 到html页面内联,但是 safari 对象本身不可用于 safari.extension.dispatchMessage safari.self.addEventListener

    编辑:
    有了这个(injected script script.js在加载的html页面/加载页面的选项卡上不可用)我的意思是在资源选项卡中打开web检查器时,我们看不到任何 extension scripts

    3 回复  |  直到 6 年前
        1
  •  1
  •   Marek B.    6 年前

    如果我正确理解您的问题,您需要在页面的javascript和Safari应用程序扩展的本机主机应用程序之间进行通信。只能使用API联系主机应用程序 只能从注入的 脚本,但不是来自页面的JS。

    function sendEventToInjected() {
        var storeEvent = new CustomEvent('myCustomEvent', {"detail": "testData"});
        document.dispatchEvent(storeEvent);
    
        var responseEventID = 'myResponseEvent';
        document.addEventListener(responseEventID, function respListener(event)
        {
            console.log("Got data from injected script: " + event.detail);
            document.removeEventListener(responseEventID, respListener);
        });
    }
    

    你的 script.js脚本 将通过注册事件侦听器捕获此事件,然后可以将数据传递到扩展的本机主机应用程序。获取本机主机的响应后,可以将响应事件调度回页面。

    document.addEventListener("myCustomEvent", function(event) {
        console.log("myCustomEvent:" + event.detail);
        safari.extension.dispatchMessage(event.detail);
    });
    
    // Listens for messages sent from the app extension's Swift code.
    safari.self.addEventListener("message", messageHandler);
    
    function messageHandler(event)
    {
        var resp = {detail: "respData"};
        var respEvent = new CustomEvent('myResponseEvent', resp);
        document.dispatchEvent(respEvent);
    }
    
        2
  •  0
  •   Emmanuel Sellier    6 年前

    您不能将页面“重新定位”到safari extensions://url,但可以从safari应用程序扩展(使用消息传递)获取要显示的HTML代码,然后将代码插入about:blank页面。

        3
  •  0
  •   dimitrirostavo    6 年前

    这看起来像苹果的虫子。我已经向BugReporter提交了一份。