我希望在加载页面后运行javascript,就像下面的示例一样,延迟为6秒。在页面加载后,JS的其余部分丢失(显而易见)...... 有没有想法如何在不点击按钮的情况下加载页面后更改内容?
javascript:window.location = "http://example.com";
setTimeout(function() {
document.getElementById('lightbox').style.display = 'none';
}, 6000);
答案 0 :(得分:3)
设置window.location后,将在浏览器加载新页面之前卸载原始页面。这意味着您的脚本将在新页面开始加载之前消失,因此无法再修改新的HTML。
此行为是浏览器安全模型所固有的。没有它,您可以将任何JavaScript注入您选择的任何网站,这将是一个巨大的安全风险。您要求的是所谓的XSS(用于跨站点脚本),浏览器应用所谓的SOP(针对同一原始策略)阻止了该操作。
有一些常见的方法可以安全地解决这个限制:
设置代理以同时为您的JavaScript和原始网站提供服务。这样,您的脚本和原始站点都来自同一个域,并满足浏览器的原始策略(SOP)。您可以在iframe中运行原始网站,并使用自定义脚本占据顶级窗口。或者,您可以将脚本注入到通过代理检索的HTML中。
将您的脚本作为浏览器加载项或用户脚本运行。如果您选择这样做,则用户必须专门授予您的脚本在本地使用提升权限运行的权限。几年前,Greasemonkey为Firefox推广了客户端脚本,但最近他们似乎失去了动力。
要求网站所有者包含您的脚本。我怀疑这是适合您情况的有效选择。但如果它是一个有效的选项,那绝对是最简单的选择。
要求用户在网站加载后运行您的脚本。这个可能也不适合你,但如果有效,它将再次成为一个非常简单的解决方案。
答案 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");
插入的代码仅在页面完全加载时运行。