我希望在页面加载后运行一个javascript,就像下面的例子一样,延迟6秒。页面加载后,JS的其余部分就丢失了(很明显)。。。知道在不点击按钮的情况下加载页面后如何更改内容吗?
javascript:window.location = "http://example.com";
setTimeout(function() {
document.getElementById('lightbox').style.display = 'none';
}, 6000);
设置window.location后,将在浏览器加载新页面之前卸载原始页面。这意味着您的脚本将在新页面开始加载之前消失,因此无法再修改新的HTML。
这种行为是浏览器安全模型固有的。如果没有它,你可以将任何JavaScript注入你选择的任何网站,这将是一个巨大的安全风险。您所要求的是所谓的XSS(用于跨站点脚本),这是由浏览器应用所谓的SOP(用于相同的原始策略)来阻止的。
有一些常见的方法可以安全地绕过这个限制:
-
设置一个代理,为您的JavaScript和原始网站提供服务。这样,您的脚本和原始站点都来自同一个域,并满足浏览器相同的原始策略(SOP)。您可以在iframe中运行原始站点,自定义脚本占据顶级窗口。或者,您可以在通过代理检索HTML时将脚本注入HTML。
-
将脚本作为浏览器加载项或用户脚本运行。如果您选择这样做,用户将必须特别授予您的脚本在本地运行的权限,并提升权限。Greasemonkey几年前为Firefox普及了客户端脚本,但最近它们似乎失去了动力。
-
请网站所有者包含您的脚本。对于你的情况,我怀疑这是一个有效的选择。但如果这是一个有效的选择,那肯定是最简单的选择。
-
要求用户在网站加载后运行您的脚本。这个可能对您也无效,但如果有效,它将再次成为一个非常简单的解决方案。
您的示例显示,您首先重定向,然后尝试隐藏#lightbox。此脚本不起作用,因为在#lightbox被隐藏之前,您正在将浏览器重定向到另一个网站。
简而言之,如果将用户重定向到另一个URL(甚至同一个URL),就不能让上一页的Javascript操作下一页的DOM。只有"在当前打开的页面上"的Javascript才能操作当前打开的网页,而不能操作其他网页。
我不明白你在说什么。JS丢失了?请说清楚一点
我想您所说的是jquery ready函数,它在DOM准备好之后运行
或者在其他情况下,请尝试使用window.onload()
函数。
这应该完成任务:
$(window).bind('load', function() {
// your code here
});
然后只需使用.delay("6000");
将延迟添加到您添加的代码中
插入的代码只有在页面完全加载时才会运行。