可以在页面脚本之前触发扩展脚本吗?

时间:2013-12-17 08:30:03

标签: javascript safari-extension

我被迫使用为IE6编写的网络应用程序(十多年前我猜),并且只适用于IE(怪癖模式下的新版本)。我已经能够使用Safari扩展修复一些更恶劣的javascript,这些扩展注入脚本以分离事件处理程序并用DOM兼容版本替换它们。

我现在把注意力转向烦恼而不是彻头彻尾的破碎。大量使用警报来告知用户进度是痛苦的。我认为用我的扩展来覆盖带有一些css弹出窗口的window.alert函数是一个相当不错的补充,但我遇到的挑战是在http帖子后发回的页面,他们做的第一件事就是显示成功(或失败)警报。

根据this Apple documentation“在创建文档时但在解析网页之前执行启动脚本”。我原以为如果页面没有被解析,页面主体的脚本标签中的脚本就不会运行,但这不是我看到的行为。相反,似乎在我的启动脚本加载之前,从post响应返回的页面中的任何脚本都会执行。

为了测试这个,我有一个非常简单的启动脚本,它记录到控制台location.href并尝试用console.log替换window.alert。

注入的启动脚本:

console.log(window.location.href + "loaded killAlert.js") ;
window.alert=function(str) { console.log(str) ; }

测试网页:

<html><head></head>
 <body>
  <script>alert("this is an alert message") ;</script>
  nothing to see here... move along.
 </body>
</html>

当加载嵌入了脚本的测试页时,会在将任何内容写入console.log之前执行警报。

我的问题 -

  • 何时启动脚本实际被调用?
  • 有没有办法让他们在页面上的任何脚本之前执行

虽然这似乎应该是相当直接的,但到目前为止,我还没能通过阅读文档,搜索或试验找到解决问题的方法。我希望别人能解决类似问题。

1 个答案:

答案 0 :(得分:0)

 <head>
    <script>
    (function() {
        console.log(window.location.href + "loaded killAlert.js") ;
        window.alert=function(str) { console.log(str) ; }
    })();
    </script>
 </head>

尝试匿名调用它,它会在创建后立即执行脚本。希望它有所帮助。