2013-12-17 76 views
1

我不得不使用为IE6编写的Web应用程序(十多年前,我猜测),只适用于IE(新版本的怪癖模式)。我已经能够修复一些更令人震惊的JavaScript与Safari扩展注入脚本来分离事件处理程序并将其替换为符合DOM的版本。扩展脚本可以在页面脚本之前触发吗?

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

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

为了测试这个,我有一个非常简单的启动脚本,它记录到控制台的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。

我的问题 -

  • 什么时候开始的脚本实际上被调用?
  • 有什么办法可以让他们执行之前页面上的任何脚本?

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

回答

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

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

+0

感谢您的建议@Holybreath。我已经尝试过 - 但得出的结论是没有优势。该脚本正在被调用,但在页面脚本执行完毕后(正如我在OP中指出的,似乎与Apple的文档相反)。 – Xcapee

相关问题