打开新页面并运行 javascript 的链接

IT技术 javascript html hyperlink
2021-03-13 10:15:53

我想知道如何打开一个页面,然后在该页面上运行 javascript(由第一页上的链接设置)。我试过这个: <a href = "http://www.example.com/otherpage" onclick = "javascript_on_otherpage()">LINK DISPLAY NAME HERE</a> 有谁知道如何实现这一目标?

3个回答

如果新页面是您控制其代码的页面,那么您可以通过链接将查询参数传递给新页面,并且您可以让新页面中的 javascript 检查该查询参数,如果找到,则在其中运行一些代码页面加载时的页面。

<a href = "http://www.example.com/otherpage?runOnStartup=3">LINK DISPLAY NAME HERE</a>

新页面中的启动 javascript 将检查runOnStartup查询参数并根据其值运行一些代码。


如果新页面与当前页面位于同一来源,那么您可以在新窗口中打开新页面,然后在打开后,您可以在该新窗口中调用一个函数。但是,您之前的页面必须仍在运行才能做到这一点。


如果新页面位于不同的来源,并且您不控制该新页面中的代码,那么出于浏览器安全原因,您将无法执行您所要求的操作。

回到我作为更有经验的 JavaScript 开发人员的这个老问题,我将其更改为正确答案。
2021-04-24 10:15:53

这是可能的,没问题。

请注意,IE 在 DOM 的这方面存在奇怪的不兼容性。

<!DOCTYPE html>
<html>
<head></head>
<body>
  <a id="foo" href>Click me!</a>

  <script>
    document.getElementById('foo').onclick = onFooClick;

    function onFooClick(e) {
      var scriptToInject, popUp, node, importedNode;

      scriptToInject = 'document.body.innerHTML = "Hello from the injected script!";';
      popUp = window.open('about:blank');
      node = document.createElement('script');
      node.textContent = scriptToInject;
      importedNode = popUp.document.importNode(node, true);
      popUp.document.body.appendChild(importedNode);
    }
  </script>
</body>
</html>

以上适用于 Mac 上的 Chrome、Firefox 和 Safari。

警告:待办事项以任何远程生产相关的机床使用下面的代码。它很容易受到 XSS 的影响,并允许任何人在您的网站上运行任何 JS 代码。这意味着恶意网站可能会窃取您用户的身份和其他敏感数据。我强烈建议我建议不要以任何形式使用本答案中描述的方法/


第 1 页

<a href="mypage.html?javascript=URL_ENCODED_JAVASCRIPT_HERE"></a>

第2页

<script>
    var javascript = <?=$_GET['javascript'] ?>;
    eval(decodeURIComponent(javascript));
</script>

如果您没有 PHP,请使用:

var javascript = window.location.href.match(/[^?=]+$/)[0];

*我还没有测试过这段代码,所以它可能需要一些修复。我还假设您拥有这两个页面。如果目标页面不是您的,出于安全原因,您不能在其上运行 JavaScript。

要对您的 JavaScript 进行 URL 编码,请转到此处,输入您的 JavaScript,然后点击编码。

@JBWar 尝试传入 alert()
2021-04-22 10:15:53
那对我不起作用。它只是进入第二页,没有什么特别的。我包含了您的第 2 页脚本,并且我确保 javascript 没有在单独的文件中定义(以防万一)。
2021-04-25 10:15:53
@JBWar 将第 2 页的代码放在 window.onload={} 如果函数在第 2 页上定义
2021-05-11 10:15:53
@JBWar 是第 2 页上定义的函数吗?
2021-05-16 10:15:53
是的。我确实对其进行了编码。从函数();到函数()%3B
2021-05-17 10:15:53