当前位置: 首页 > 知识库问答 >
问题:

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

西门振
2023-03-14

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

我有一个Safari扩展,可以监听“打开”、“预先导航”、“导航”和“激活”事件。当触发这些事件时,我希望跟踪activeTab的url和页面标题。

然而,在某些情况下(即在打开新选项卡时,在之前导航和导航),页面标题并不总是在safari.application.activeBrowserWindow.activeTab对象或传递的事件对象中定义敬我的经理人。

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

仅供参考,我已将网站访问权限设置为my 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

共有1个答案

凤棋
2023-03-14

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

一种解决方案可能是使用导航事件,而不是在页面实际加载之前使用导航。然而,我不确定是否真的能保证页面被加载,但这确实使它更有可能被加载。

如果这仍然是一个问题,一个更复杂的替代方案是使用注入脚本,每当页面加载时,该脚本都会向全局页面发送消息。在注入的脚本中使用DOM就绪事件,然后向包含页面标题的全局页面发送消息。使用if(windows==window.top)防止嵌入的iframe也发送消息。

 类似资料:
  • 问题内容: 对于我的网站,我想添加一个新功能。 我希望用户能够上传他的书签备份文件(如果可能的话,可以从任何浏览器上传),这样我就可以将其上传到他们的个人资料,而他们不必手动插入所有文件… 我唯一缺少的是从上传文件中提取标题和URL的部分。任何人都可以提供从哪里开始或在哪里阅读的线索? 使用的搜索选项和如何从原始HTML文件提取数据?这是与我最相关的问题,因此不再赘述。 我真的不介意它是否使用jq

  • 返回当前页面URL。 使用 window.location.href 获取当前页面URL。 const currentURL = () => window.location.href; currentURL(); // 'https://google.com'

  • 我有一个PHP代码块,它将根据主页标题为标题指定不同的样式。但是,我的网站在每个主页上也有多个子菜单项。该代码目前用于将新样式分配给主导航页面,但没有将颜色配置文件分配给子页面样式元素。如何扩展解决方案以适应任何新的子页面(即获取主导航项子页面的wordpress/php函数)。 这是我的密码: 因此,我正在寻找类似于的东西,以容纳任何服务子菜单项或关于。我想要一个更自动化的解决方案,而不是将每个

  • 我在WordPress中编写了以下函数: 下面是我在header.php文件中如何调用它: 当你创建一篇新文章时,会有一个元框,你可以在其中输入页面标题以进行搜索引擎优化。如果保留为空,则会显示默认的页面标题。当您在主页上时,将显示默认的页面标题。 然而,我刚刚发现主页并没有像它应该显示的那样显示默认标题;相反,它显示的是最近一篇文章的标题标签。你知道是什么原因造成的吗?或者我如何修复它?

  • 我正在使用Stripe Connect,并在文档中使用了它们的示例代码。你将一个用户重定向到条带页面,他们注册后会重定向回你的站点。Stripe然后会在URL中发送一个代码,以便您能够访问并向用户帐户收费。 重定向后,这段代码就是他们在示例中的内容: 重定向URL为https://connect.stripe.com/oauth/authorize?response_type=code

  • 本文向大家介绍PHP获取当前页面URL函数实例,包括了PHP获取当前页面URL函数实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP获取当前页面URL函数实例,分享给大家供大家参考。具体实现方法如下: 在PHP中,没有默认的Function来获取目前所在页面的URL,所以今天就向大家介绍一个在PHP获取当前页面完整URL的PHP函数. 函数代码如下,调用时只需要使用 curPage