我正在使用附加 SDK 编写一个 Firefox 扩展,并且我成功地从内容脚本扫描了一个站点,现在想更深入。但是,当我更改网址时
window.location.href = "http://www.thatsite.com/foo.php";
alert($('#abc');
我无法访问新的 DOM。警报会在站点被完全读取之前出现。我试过$(document).ready(function()
了,但似乎这只有效一次......
我怎样才能等到站点完全构建?
我正在使用附加 SDK 编写一个 Firefox 扩展,并且我成功地从内容脚本扫描了一个站点,现在想更深入。但是,当我更改网址时
window.location.href = "http://www.thatsite.com/foo.php";
alert($('#abc');
我无法访问新的 DOM。警报会在站点被完全读取之前出现。我试过$(document).ready(function()
了,但似乎这只有效一次......
我怎样才能等到站点完全构建?
只要页面加载,您的内容脚本就会存在 - 如果您导航到不同的页面,此内容脚本实例将被卸载。内容脚本的另一个实例将被加载到新页面中,但是您可以在那里执行所有必要的操作。唯一的问题是将数据从旧实例传递到新实例。您可以使用将数据发送到附加组件postMessage()
,然后让附加组件将其发送到onAttach()
处理程序中的新内容脚本。在您的情况下这是否可能取决于您要实现的目标(您没有在问题中这么说)。
如果您想与更改位置的选项卡进行交互,则需要将您的 JS 移动到更高的级别。请参阅:MDC 文档。实际上,您的 JS 在当前页面的上下文中被应用一次。一旦新页面加载,它实际上是不存在的。
确实,无论如何,您都不应该像从插件那样与页面进行交互。这是类似于 Greasemonkey 用户脚本的行为,而不是 Firefox 扩展。