- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为正在度假且对 Safari 扩展开发知之甚少的同事调试一些东西。
我有一个 Safari 扩展,它监听“打开”、“beforeNavigate”、“导航”和“激活”事件。当这些事件中的任何一个被触发时,我想跟踪 activeTab 的 url 和页面标题。
但似乎在某些情况下(即 beforeNavigate 和打开新选项卡时导航)页面标题并不总是在 safari.application.activeBrowserWindow.activeTab
对象或事件
对象传递给我的处理程序。
当我将事件对象打印到控制台时,它已正确填充,但如果我直接在事件处理程序中访问 event['target']['title']
它会返回 无标题
。我想当时填充数据会有延迟,但我不知道如何处理延迟,也找不到任何相关文档。
仅供引用,我在我的 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
,前提是您不需要在页面实际加载之前特别需要执行任何操作。但是,我不确定是否真的能保证页面将被加载,但它确实使它更有可能。
如果问题仍然存在,更复杂的替代方法是使用 injected script每当页面加载时,它都会向全局页面发送一条消息。在注入(inject)的脚本中使用 DOM 就绪事件,然后向包含页面标题的全局页面发送一条消息。使用 if (window == window.top)
来防止嵌入式 iframe 也发送消息。
关于safari-extension - 从 SafariNavigateEvent 获取 URL 和页面标题数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18834362/
我正在为正在度假且对 Safari 扩展开发知之甚少的同事调试一些东西。 我有一个 Safari 扩展,它监听“打开”、“beforeNavigate”、“导航”和“激活”事件。当这些事件中的任何一个
我是一名优秀的程序员,十分优秀!