如何在页面加载(JS)后更改内容?

时间:2012-02-14 16:47:07

标签: javascript load timeout

我希望在加载页面后运行javascript,就像下面的示例一样,延迟为6秒。在页面加载后,JS的其余部分丢失(显而易见)...... 有没有想法如何在不点击按钮的情况下加载页面后更改内容?

javascript:window.location = "http://example.com"; 
setTimeout(function() {
    document.getElementById('lightbox').style.display = 'none';
}, 6000);

4 个答案:

答案 0 :(得分:3)

设置window.location后,将在浏览器加载新页面之前卸载原始页面。这意味着您的脚本将在新页面开始加载之前消失,因此无法再修改新的HTML。

此行为是浏览器安全模型所固有的。没有它,您可以将任何JavaScript注入您选择的任何网站,这将是一个巨大的安全风险。您要求的是所谓的XSS(用于跨站点脚本),浏览器应用所谓的SOP(针对同一原始策略)阻止了该操作。

有一些常见的方法可以安全地解决这个限制:

  1. 设置代理以同时为您的JavaScript和原始网站提供服务。这样,您的脚本和原始站点都来自同一个域,并满足浏览器的原始策略(SOP)。您可以在iframe中运行原始网站,并使用自定义脚本占据顶级窗口。或者,您可以将脚本注入到通过代理检索的HTML中。

  2. 将您的脚本作为浏览器加载项或用户脚本运行。如果您选择这样做,则用户必须专门授予您的脚本在本地使用提升权限运行的权限。几年前,Greasemonkey为Firefox推广了客户端脚本,但最近他们似乎失去了动力。

  3. 要求网站所有者包含您的脚本。我怀疑这是适合您情况的有效选择。但如果它是一个有效的选项,那绝对是最简单的选择。

  4. 要求用户在网站加载后运行您的脚本。这个可能也不适合你,但如果有效,它将再次成为一个非常简单的解决方案。

答案 1 :(得分:1)

您的示例显示您首先重定向,然后尝试隐藏#lightbox。此脚本不起作用,因为在#lightbox被隐藏之前,您将浏览器重定向到另一个站点。

简而言之,如果您将用户重定向到另一个URL(甚至是同一个URL),则不能让上一页的Javascript操纵下一页的DOM。只有“在当前打开的页面上”的Javascript才能操作当前打开的页面而不能操作其他页面。

答案 2 :(得分:0)

我还不明白你在说什么。 JS丢了吗?请更清楚。
我认为你所说的是jquery ready函数,它在DOM准备好后运行。
或者在另一种情况下,尝试使用window.onload()功能。

答案 3 :(得分:0)

这应该做的工作:

$(window).bind('load', function() {
// your code here
});

然后只需使用.delay("6000");

将延迟添加到添加的代码中

插入的代码仅在页面完全加载时运行。