gpt4 book ai didi

Safari 扩展问题

转载 作者:行者123 更新时间:2023-12-04 01:01:20 25 4
gpt4 key购买 nike

我正在构建我的第一个 Safari 扩展程序——一个非常简单的扩展程序——但我遇到了一些问题。该扩展归结为一个单一的注入(inject)脚本,该脚本试图绕过 native 提要处理程序并重定向到 http://URI。到目前为止,我的问题有两个:

  • “白名单”没有按我预期的方式工作。由于所有提要都显示在“feed://”协议(protocol)下,我试图在白名单中将其捕获为“feed://*/*”(黑名单中没有任何内容),但我最终收到了一个请求我无法理解的循环。如果我设置 黑名单http://*/*”和“https://*/*”的值,一切都按预期工作。
  • 我不知道如何从注入(inject)的脚本中访问我的设置。该脚本创建一个 beforeload事件处理程序,但无法使用 safari.extension.settings 访问我的设置文档中指示的路径。

  • 我在 Apple 的文档中没有发现任何内容表明我的脚本中不应提供设置。由于扩展是一个新功能,即使是谷歌也返回有限的相关结果,其中大部分来自官方文档。

    我错过了什么?

    更新
    所以我希望文档不完整,因为它非常糟糕,但我已经了解了一些关于设置的知识。事实证明,从注入(inject)脚本中, SafariExtensionSettings对象不可用。注入(inject)脚本只能访问 SafariContentExtension对象(根本没用),但它的别名方式完全相同( safari.extension.settings )——IMO,这是个坏主意。如 injection script documentation 中所述:

    Important: When you use safari.extension from within an injected script, you are not addressing the SafariExtension class. You are addressing the SafariContentExtension class.



    您必须使用消息系统与可以访问设置的全局 HTML 文件对话。这有点乱,但我有一条消息被发送到 global.html检索设置的文件,一旦我弄清楚如何去做,就会向我的注入(inject)脚本发送一条消息。

    由于我在加载文档之前完成了所有工作,因此我发现的所有发回消息的方法都依赖于我没有的页面对象。

    最佳答案

    像此时的其他人一样,我仍在攀登学习曲线,但我是这样处理这个问题的:

    我有一个没有 chrome 和一个注入(inject)结束脚本 (script.js) 的简单扩展。为了加载设置,我添加了一个简单的全局页面 (proxy.html)。当 script.js 被注入(inject)时,它会发送一个 getSettings向 proxy.html 发送消息。 proxy.html 以 setSettings 响应消息,并且 script.js 继续初始化。

    我在有关此主题的文档中找到的最有用的页面是 Messages and Proxies .

    代理.html:

    <!doctype html>
    <html lang="en">
    <head>
    <script type="text/javascript">
    safari.application.addEventListener( "message", function( e ) {
    if( e.name === "getSettings" ) {
    e.target.page.dispatchMessage( "setSettings", {
    sort_keys: safari.extension.settings.getItem( "sort_keys" )
    } );
    }
    }, false );
    </script>
    </head>
    <body></body>
    </html>

    脚本.js:
    ( function() {
    var settings, init = function() {
    // do extension stuff
    };

    // listen for an incoming setSettings message
    safari.self.addEventListener( "message", function( e ) {
    if( e.name === "setSettings" ) {
    settings = e.message;
    init();
    }
    }, false );

    // ask proxy.html for settings
    safari.self.tab.dispatchMessage( "getSettings" );
    }() )

    关于Safari 扩展问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3026686/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com