标签: safari-app-extension

如何在Safari App Extension中获得活动标签?

当我按照Apple的示例进行操作时,总是得到nil activeTab

override func toolbarItemClicked(in window: SFSafariWindow) {
    // This method will be called when your toolbar item is clicked.

    window.getActiveTab(completionHandler: { (activeTab) in
        print(activeTab)
        activeTab?.getActivePage(completionHandler:  { (activePage) in
            print(activePage)
            activePage?.getPropertiesWithCompletionHandler( { (properties) in
                print(properties)
                if properties?.url != nil {
                    let urlString = properties!.url.absoluteString
                    print("URL!", urlString)
                    let videoURL = self.youtubeDl(urlString: urlString)
                    if videoURL != nil {
                        window.openTab(with: videoURL!, makeActiveIfPossible: true, completionHandler: nil)
                    }
                }
            })
        })
    })
}
Run Code Online (Sandbox Code Playgroud)

safari macos swift safari-app-extension

3
推荐指数
2
解决办法
1786
查看次数

Mac 应用程序扩展在 Unix 套接字上调用 connect 获取 EPERM(沙盒?)

我正在开发一个大型 Mac 应用程序,该应用程序分为许多不同进程中的许多组件。其中一个组件是 Safari Extension Companion[1],它是一种“应用程序扩展”,允许基于 JavaScript 的扩展与本机代码对话(这是我们组件之间安全 IPC 所必需的)。IPC 通道是用户~/Library/Application Support/<APPNAME>/目录中的 Unix 域套接字。出于遗留原因,Unix 套接字服务器使用 HTTP,客户端库使用自定义URLProtocol,以防万一。

这适用于我们所有其他组件,但它们都没有在沙箱中运行[2]。但是,扩展伴侣的 Xcode 模板创建了一个沙箱,并且如果是沙箱,则伴侣会加载,但它似乎需要沙箱。我尝试在权利文件中设置com.apple.security.app-sandboxfalse,或删除权利文件(以及对它的所有引用),两者似乎都阻止了 Safari 加载伴侣(如果直接调用它仍然作为自己的二进制文件运行,但 Safari 显然赢了) t 触摸它)。

我已经向沙箱添加了例外,以允许它访问相关目录,并且直接访问 IPC 套接字;但这似乎还不够。尝试打开套接字时遇到的错误是EPERM(不允许操作),这并不能真正解释问题。在向权利添加例外并修复路径后,~/Library/现在可以按预期写入日志文件(也在 "real" 下)之类的内容。

此错误发生在connect调用套接字时(它返回 -1,表示错误,并且errno为 1 ( EPERM)),因此实际上从未尝试写入或读取套接字。这对我来说似乎很奇怪,因为 - 根据Apple Sandbox Design Guide -

UNIX 域套接字很简单;它们就像任何其他文件一样工作

关于沙盒例外。

权利文件(使用此处的答案从自动生成的模板中修改:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict> …
Run Code Online (Sandbox Code Playgroud)

macos unix-socket appstore-sandbox safari-app-extension

3
推荐指数
1
解决办法
1195
查看次数

Safari App Extension 不会第二次加载

我遇到了一个奇怪的问题,我第二次运行 Safari 应用程序扩展时,它不会显示在 Safari 中。

  1. 打开 Xcode。
  2. 新建 > 项目。
  3. 在“其他”下,选择“Safari 扩展应用程序”,然后单击“下一步”。
  4. 在此“产品名称”屏幕上输入您想要的任何内容,然后单击“下一步”。
  5. 单击“创建”。
  6. 单击 Xcode 左上角的 Play 图标运行项目。
  7. 它将打开一个小应用程序,底部有一个按钮,文本为:“在 Safari 扩展首选项中打开”。
  8. 应该不会出现 如果是,请跳至 10。
  9. 转到 Safari 标题菜单中的开发,单击“允许未签名的扩展”。
  10. 出现后,选中该框以启用它。
  11. 单击左上角的停止图标,停止运行 Xcode。
  12. 更改插件的 Info.plist 中的值,例如将SFSafariWebsiteAccess.Level“Some”更改为“All”。
  13. 单击 Xcode 中的播放图标。
  14. Safari 会告诉您扩展权限已更改。确认这些更改,扩展将不再显示。

如果我更改其他值,也会发生同样的事情。如果我保持扩展代码和设置完全不变,则不会出现任何问题。但是一旦我更改了某个值,即使我将这些设置更改回来,它也会完全中断。

这对我来说发生在两台不同的 Mac 上,分别是 10.13 和 10.14 以及最新的 Xcode。

safari xcode safari-app-extension

3
推荐指数
1
解决办法
408
查看次数

你可以在Mac App Store外面发布Safari App Extension*吗?

应用程序扩展编程指南这样说:

要提供OS X应用程序扩展,建议您将包含的应用程序提交到App Store,但这不是必需的.

Safari浏览器应用扩展编程指南这样说:

Safari应用程序扩展程序捆绑在应用程序中,并通过App Store分发.

有没有人知道,如果可以在Mac App Store 外部发布带有应用程序的Safari App Extension ?

谢谢!

safari macos mac-app-store osx-extensions safari-app-extension

2
推荐指数
1
解决办法
1108
查看次数

如何调用弹出窗口以显示在 Safari 应用程序扩展中?

我正在 xcode 中使用 swift 开发一个 safari 应用程序扩展。
在 my 中SafariExtensionHandler.swift,我声明了一个 func:

    override func popoverViewController() -> SFSafariExtensionViewController {
        return SafariExtensionViewController.shared
    }
Run Code Online (Sandbox Code Playgroud)

而在我的SafariExtensionViewController.swift,

class SafariExtensionViewController: SFSafariExtensionViewController {

    static let shared: SafariExtensionViewController = {
        let shared = SafariExtensionViewController()
        shared.preferredContentSize = NSSize(width:320, height:240)
        return shared
    }()

}
Run Code Online (Sandbox Code Playgroud)

但是,当我单击 safari 工具栏中的图标时,没有任何显示,也没有错误。有人帮忙吗?我对 safari 应用程序扩展和苹果家庭开发很陌生。

safari-extension swift safari-app-extension

2
推荐指数
1
解决办法
409
查看次数

在Safari 12 [Safari App Extension]中使用JavaScript打开新标签

我有此扩展,我想在该扩展的JavaScript部分中打开一个新标签。在将其迁移到Safari App Extension之前,我可以做

window.open(url, "_blank");
Run Code Online (Sandbox Code Playgroud)

但是,当我在Safari 12中将其作为App Extension运行时,它将当前链接添加到阅读列表(?!)。

当我在控制台中运行上面的代码时,它将打开的新标签url,但我必须在Safari偏好设置中启用弹出窗口。我在苹果非常糟糕的文档中找不到任何东西。

这甚至可以在“客户端”上实现,还是我必须在Swift代码中处理呢?

javascript safari safari-extension safari-app-extension

1
推荐指数
1
解决办法
959
查看次数