从 SafariNavigateEvent 获取 URL 和页面标题数据

2024-01-09

我正在为一位正在度假的同事调试一些东西,他对 Safari 扩展开发知之甚少。

我有一个 Safari 扩展程序,可以监听“open”、“beforeNavigate”、“navigate”和“activate”事件。当这些事件中的任何一个被触发时,我想跟踪 activeTab 的 url 和页面标题。

然而,在某些情况下(即 beforeNavigate 和打开新选项卡时导航),页面标题并不总是在safari.application.activeBrowserWindow.activeTab对象或event对象传递给我的处理程序。

当我将事件对象打印到控制台时,它已正确填充,但是如果我访问event['target']['title']直接在事件处理程序中返回Untitled。我想,填充数据会出现延迟,但我不知道如何处理延迟,也找不到任何相关文档。

仅供参考,我在 info.plist 中将网站访问权限设置为 ALL。

有人遇到过这个问题吗?关于如何修复它有什么想法吗?

他是一段代码:

safari.application.addEventListener("beforeNavigate", function (event) {
    console.log('//-- Event Data -------------------------------------');
    console.log(event);
    console.log(event['target']);
    console.log('Url: ' + event['target']['url']);
    console.log('Title: ' + event['target']['title']);

    console.log('//-- Tab Data -------------------------------------');
    console.log('Url: ' + safari.application.activeBrowserWindow.activeTab.url);
    console.log('Title: ' + safari.application.activeBrowserWindow.activeTab.title);
}, true);

以及控制台的输出:

//-- Event Data -------------------------------------
SafariBeforeNavigateEvent
    BUBBLING_PHASE: 3
    CAPTURING_PHASE: 1
    TARGETING_PHASE: 2
    bubbles: true
    cancelable: true
    currentTarget: null
    defaultPrevented: false
    eventPhase: 0
    target: SafariBrowserTab
        browserWindow: SafariBrowserWindow
        page: SafariWebPageProxy
        reader: SafariReader
        title: "Google"
        url: "https://www.google.ca/"
        __proto__: CallbackObject
    timeStamp: 1379353767889
    type: "beforeNavigate"
    url: "http://www.google.ca/"
    __proto__: CallbackObject

SafariBrowserTab
    browserWindow: SafariBrowserWindow
    page: SafariWebPageProxy
    reader: SafariReader
    title: "Google"
    url: "https://www.google.ca/"
    __proto__: CallbackObject
Url:
Title: Untitled
//-- Tab Data -------------------------------------
Url: 
Title: Untitled

我猜问题是标题实际上是在 HTML 页面中定义的。由于这是一个beforeNavigate事件中,页面尚未加载,因此一般来说标题尚不可用,只有 URL。

一种解决方案可能是使用navigate事件而不是beforeNavigate,前提是您在页面实际加载之前不需要执行任何操作。然而,我不确定这实际上保证了页面将被加载,但它确实使它更有可能加载。

如果仍然存在问题,更复杂的替代方法是使用注入脚本 https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/InjectingScripts/InjectingScripts.html#//apple_ref/doc/uid/TP40009977-CH6-SW1每当页面加载时,都会向全局页面发送消息。在注入的脚本中使用 DOM 就绪事件,然后只需将消息分派到包含页面标题的全局页面。使用if (window == window.top)以防止嵌入的 iframe 也发送消息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 SafariNavigateEvent 获取 URL 和页面标题数据 的相关文章

  • 如何拦截网络请求

    有没有类似 Chromium 的东西chrome webRequestSafari 扩展 我浏览了他们的文档here 我能找到的最接近的东西是SafariBeforeNavigateEvent 这将阻止新页面加载 但仍会将请求发送到服务器
  • 如何以编程方式打开 Safari 扩展 ToolbarItem 弹出窗口

    我想以编程方式触发 Safari 扩展工具栏项目上的 单击 事件 以便在网页上发生某些情况后出现我的自定义弹出窗口 我正在使用新的 Xcode 扩展 IDE 并使用界面生成器构建了我的弹出窗口 目前 StackOverflow 上的所有答案
  • 从两个字符串中获取编辑

    我将深入探讨我的问题 如果您不想阅读所有内容 可以跳至 TL DR 我正在尝试做什么 我需要存储一个 文件 文本文件 可以由用户编辑 如果我有原始文件 这可能是巨大的 Lorem ipsum dolor 坐 amet 用户要进行更改 Foo
  • Safari 5 扩展:如何检测窗口的当前选项卡何时发生更改?

    我有一个包含工具栏的 Safari 5 扩展 每当当前选项卡发生更改时 该工具栏都应该更新 我想从我的酒吧脚本中做这样的事情 safari self browserWindow addEventListener activeTab tabC
  • 如何使用javascript将对象存储在数组中

    我正在开发 Safari 浏览器的扩展 我想将当前活动选项卡对象存储在数组中作为键 如何在数组中存储多个选项卡对象 我写了以下代码 第一个场景 var obj obj1 new Object obj2 new Object obj3 new
  • Safari 应用扩展未安装

    仅供参考 我对 XCode 开发完全陌生 我有一个 Safari 应用程序扩展项目 如果我从 XCode 中运行它 它会将我的扩展添加到 Safari 中 如果我创建存档 导出并选择 导出开发签名应用程序 我可以获取生成的文件 将其安装在另
  • Safari Web Extension - 仅在单击扩展按钮时注入脚本

    为了简单起见 我参考了 Apple 的 SeaCreator 扩展示例 您可以从这里获取 https drive google com file d 1loBDgkJAEtyh0QehOUlgOSyUnW9ZZDk6 view usp sh
  • 从 SafariNavigateEvent 获取 URL 和页面标题数据

    我正在为一位正在度假的同事调试一些东西 他对 Safari 扩展开发知之甚少 我有一个 Safari 扩展程序 可以监听 open beforeNavigate navigate 和 activate 事件 当这些事件中的任何一个被触发时
  • Safari 扩展截屏

    我正在开发 Safari 浏览器扩展 它应该具有截图功能 Chrome 和 Firefox 有自己的 api 来获取当前窗口文档的 SS 我找不到任何特定于 Safari 的 API 文档 窗口和选项卡 API https develope
  • Safari 未检测到我的扩展证书

    我已注册 Safari 开发计划并拥有有效的 Apple ID 我已按照Apple提供的所有步骤进行操作 问题是 Windows XP Service Pack 2 无法识别命令 certreq 而说明表明它可以在任何 Windows 计算
  • 不允许 HTTPS 页面运行来自 safari-extension:// URI 的不安全内容

    我在 Safari 9 1 11601 5 17 1 的 Safari 扩展中遇到了奇怪的行为 我尝试使用 safari extension 插入一个新的 Iframe 其 src 指向扩展包中的 html 文件 如果我单击控制台中显示的错
  • 无法在 Safari 上运行测试 - 我们需要开发证书吗

    我正在尝试在 Safari 上运行量角器测试 在研究过程中 我了解到使用 Protractor 时无需下载任何特定于 Safari 的任何内容 因为驱动程序已附带 当尝试运行我的测试时 我收到 No Safari driver found
  • Safari Web 扩展中后台服务工作人员发出 HTTP 请求期间出现 CORS 问题

    链接到 Xcode 项目的存储库来测试问题 测试 CORS 问题 https github com nick kadutskyi safari ext cors issue 这个扩展使用 Manifest v3 我有example com
  • 如何使用 Selenium Safari Webdriver

    我正在尝试使用 Safari WebDriver 并且按照说明进行操作here https code google com p selenium wiki SafariDriverInternals构建 Safari 驱动程序 但现在我不知
  • 如何使用键盘快捷键打开弹出窗口? [复制]

    这个问题在这里已经有答案了 可能的重复 jQuery 的键盘快捷键 https stackoverflow com questions 593602 keyboard shortcuts with jquery 我想使用快捷键显示弹出窗口
  • Safari 扩展弹出窗口链接

    是否可以在 Safari 弹出窗口中使用链接 我已经做了我能想到的所有事情 但似乎向弹出窗口添加链接只会改变外观 并且不会导致任何可点击的内容 无论是使用 href 还是 onclick 您可以在 href 或 div 上添加 onclic
  • Safari 扩展将消息发送到特定选项卡

    有没有办法从全局页面发送消息到特定选项卡 我目前正在做的是 在创建选项卡时 注入的脚本会创建一个唯一的 ID 并将包含该编号的消息发送到全局页面 并且全局页面会保存该编号 如果全局页面需要发送一些数据到一个tab 即 tab 3 然后全局页
  • 您可以在 Safari 扩展中修改 http 请求标头吗?

    我可以在 FF 和 IE 中执行此操作 并且我知道 Chrome 中尚不存在 有人知道是否可以在 Safari 插件中执行此操作吗 我在文档中找不到任何这样或那样的说法 Safari 增加了扩展支持 但与 Chrome Firefox Ed
  • 使用 Selenium Webdriver 和 Safari

    我正在使用 Visual Studio Express 2012 开发 Selenium Webdriver C 我安装了最新的 safari 浏览器 并为 Apple 的扩展创建了开发人员证书 并且构建了扩展并安装了它 但即使在那之后 我
  • 一键安装 Safari 扩展

    当用户下载插件 Firefox 例如 时 下载完成后插件安装就会开始 在 Safari 中是否有可能实现同样的目标 即用户单击链接下载插件 下载后会自动开始安装 我认为这不可能在任何其他域上执行 除了extensions apple com

随机推荐

  • 类型参数命名准则是什么?

    我注意到了 也看到了必备 C 3 0 https rads stackoverflow com amzn click com 0321533925书上 参数通常定义为T or TEntity 例如 public class Stack
  • !: Angular 中的(爆炸冒号)表示法

    I found 中使用的符号Angular 弃用文档 https angular io guide deprecations dependency on a reflect metadata polyfill in jit mode Inp
  • TextField 包含日语字符时缺少字体样式

    将字符串传递给视图 Case 1 English alphabet is no problem test deck ABCDE Case 2 Font style is missing test deck Case 3 Font style
  • 用于比较 Windows 二进制文件的工具?

    我们的 QA 团队希望根据 EXE 和 DLL 在构建之间实际发生的变化来集中测试 我们有一个很好的 svn 更改报告 但是源代码和更改的二进制文件之间的关系并不总是很明显 我们正在比较的构建始终是完全干净的构建 因此我们不能使用文件系统时
  • Python 基础知识 为什么 set() 有效但 {} 失败? [复制]

    这个问题在这里已经有答案了 s this that this 为什么set s 工作但是 s 失败了 TypeError unhashable type list 这是因为它们意味着不同的东西 set s 迭代s创建一个集合 而文字语法 s
  • 如何定期使用 PAPI 进行性能测量

    我想使用 C 中的 PAPI api 分析我的应用程序的系统性能 一般结构是 初始化PAPI 初始化感兴趣的计数器 启动计数器 运行应用程序的主要逻辑 结束计数器并读取值 我想定期读取计数器 例如每 1 秒一次 而不是在应用程序结束时读取最
  • OData 筛选器和 Guid 字段的问题

    我正在尝试使用 OData 来运行一些代码 下面的代码似乎不起作用 ds是 OpenDataServiceProxy 适配器类型 ID是 Guid 的字符串表示形式 适配器名称是一个字符串名称 ds query DataAdapters f
  • 如何解决 Node.js 错误:找不到模块?

    当我启动一个 dockerized Node js 测试应用程序时 sudo docker compose up 我收到以下错误 Starting testapp web 1 done Attaching to testapp web 1
  • AWS S3分段上传在不指定源文件时工作

    我已经构建了一个 ajax 上传器 可以将文件直接上传到 S3 它运行完美 但我感到困惑的是它实际上是如何工作的 我对文档中的显示方式采取了不同的方法 不是指定 sourceFile 而是在元数据中指定文件名 没有发送文件位置 我在用着AW
  • Laravel 和 LocalStack 的最大执行时间

    我正在尝试使用 Localstack 来模拟 s3 实例 以便我可以从表单上传图像 这是我的 docker compose localstack image localstack localstack latest container na
  • 如何使用 Ruby/Rails 从网站获取内容?

    我想使用 ruby rails 从网站复制一些特定内容 我需要的内容位于一个 marquee html 标签内 由 div 分隔 我如何使用 ruby 访问此内容 更准确地说 我想使用某种 ruby gui 最好是鞋子 我该怎么做 这并不是
  • 如何定义依赖于Provider的GoRouter?

    我正在将 GoRouter 集成到我的 Flutter 应用程序中 我已经在使用 Riverpod 我有一个isAuthorizedProvider定义如下 final isAuthorizedProvider Provider
  • 使用 UIPageViewController 在多个视图控制器之间滑动

    我的 UIPageViewController 根本不工作 我想做的是在 UIPageViewController 内切换 2 个视图控制器 我已经遵循这里的指南但失败了 将 UIPageViewController 与 swift 和多个
  • Matplotlib - 堆积条形图和工具提示

    This code https github com joferkington mpldatacursor issues 47当鼠标悬停在条形图上时返回工具提示 我想修改堆叠条形图的代码 并在鼠标悬停在条形图的部分时获取该部分的特定工具提示
  • 如何填写BabeLua设置?

    我希望能够在 Visual Studio 2013 Ultimate 中对 LUA 进行编程 我有 BabeLua 来尝试做到这一点 在该程序中有一个名为 设置 的选项卡 该选项卡中有 5 个我不明白的文本框 LUA 脚本文件夹 存储文件的
  • 无服务器框架的最大策略大小错误

    部署大型无服务器应用程序时 我们首先达到了 200 个资源的上限 我们使用serverless plugin split stacks库解决了这个问题 但后来可能引入了另一个问题 发生错误 IamRoleLambdaExecution 最大
  • 如何在 iOS 设备上构建视差滚动

    今天我看到了最令人惊叹的 ipad 应用程序 我确信它是使用 html5 css3 和 javascript 编写的 应用程序最好的部分是他们完美地创建了视差滚动 我的问题是 如何实现 我找不到任何关于在 iOS 设备上创建视差滚动的文档
  • 使用字符串作为列名时如何使用 dplyr::arrange(desc()) ?

    我该如何使用dplyr arrange dplyr desc 并传入一个字符串作为列名 这是一个示例数据集 df lt data frame a 1 3 b 3 1 有效的例子 df gt dplyr arrange b df gt dpl
  • 如何使用 rspec 为 ApplicationCable::Connection 测试存根 env['warden'].user

    轨道 5 2 我有以下 ApplicationCable Connection ruby 文件 module ApplicationCable class Connection lt ActionCable Connection Base
  • 从 SafariNavigateEvent 获取 URL 和页面标题数据

    我正在为一位正在度假的同事调试一些东西 他对 Safari 扩展开发知之甚少 我有一个 Safari 扩展程序 可以监听 open beforeNavigate navigate 和 activate 事件 当这些事件中的任何一个被触发时