2012-02-14 100 views
1

我想要一个JavaScript在加载页面后运行,就像下面的例子延迟6秒。在页面加载后,JS的其余部分就会丢失(显而易见)... 有没有任何想法如何在页面加载后更改内容而不点击按钮?如何在页面加载后更改内容(JS)?

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

在谷歌上查找“dom操作”。 – 2012-02-14 16:51:29

+0

我失败了。我有超过6个小时寻找解决方案,这是我最后的希望得到帮助。 – virusbogdan 2012-02-14 16:53:34

+0

你想添加脚本到加载了window.location的页面吗?我假设这个页面不是你的? – Jivings 2012-02-14 16:56:13

回答

3

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

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

有一些常见的方法来解决此限制在一个安全的方式:

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

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

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

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

0

我还没有明白你在说什么。 JS丢失了?请更清楚。
我想你所说的是在DOM准备就绪后运行的jquery ready函数。
或者在其他情况下,请尝试使用window.onload()函数。

+0

对不起,我没有让自己干净(英语不是我的主要语言,我尽我所能) 代码将运行到窗口加载,这就是它。其余的将不会在新页面上运行。 试试看吧 - javascript:window.location =“http://google.com”; setTimeout(function(){alert('Loaded complete');},0); – virusbogdan 2012-02-14 16:56:40

0

这应该做的工作:

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

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

延迟添加到您添加的代码插入的代码时,你的网页是完全加载才会运行。

1

您的示例显示您首先重定向,然后试图隐藏#lightbox。此脚本不起作用,因为您在#lightbox隐藏之前将浏览器重定向到其他网站。

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

+0

好的,这是问题所在。我试图找到一个解决方案,但似乎不可能? – virusbogdan 2012-02-14 17:00:49

+0

是的,这是不可能的。如果您还可以访问要重定向到的网站,那么您可以在重定向时发送特定的GET变量或其他内容,然后在目标网站上使用JavaScript进行相应操作。但总结一下,是的,不可能控制另一个页面的Javascript。 JavaScript包含在它已加载的页面中。 – kingmaple 2012-02-15 07:20:28

相关问题