【问题标题】:How to change content after page is loaded (JS)?页面加载后如何更改内容(JS)?
【发布时间】:2012-02-14 16:47:07
【问题描述】:

我希望在页面加载后运行 javascript,如下例所示,延迟为 6 秒。页面加载后,其余的 JS 就丢失了(很明显)...... 知道如何在不点击按钮的情况下加载页面后更改内容吗?

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

【问题讨论】:

  • 在 google 上查找“dom 操作”。
  • 我失败了。我有超过 6 个小时的时间来寻找解决方案,这是我获得帮助的最后希望。
  • 您想将脚本添加到加载了 window.location 的页面?我猜这个页面不是你的?

标签: javascript load timeout


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 嗯,是的,这就是问题所在。我试图为此找到解决方案,但似乎不可能?
    • 是的,这是不可能的。如果您还可以访问您被重定向到的站点,那么您可以在重定向时发送特定的 GET 变量或其他内容,然后让目标站点上的 JavaScript 采取相应的行动。但总而言之,是的,控制另一个页面的 Javascript 是不可能的。 JavaScript 包含在它加载的页面中。
    【解决方案3】:

    我没听懂你在说什么。 JS丢了?请更清楚。
    我认为您在谈论的是在 DOM 准备好后运行的 jquery ready 函数。
    或者在其他情况下,尝试使用window.onload()函数。

    【讨论】:

    • 对不起,我没有把自己弄干净(英语不是我的主要语言,我尽我所能)代码将一直运行到窗口加载,仅此而已。其余的不会在新页面上运行。自己试试 - javascript:window.location = "google.com"; setTimeout(function() {alert('加载完成');}, 0);
    【解决方案4】:

    这应该可以完成工作:

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

    然后只需使用 .delay("6000"); 将延迟添加到您添加的代码中

    插入的代码只会在您的页面完全加载后运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 2016-03-13
      • 2016-03-20
      • 1970-01-01
      相关资源
      最近更新 更多