23

基本上我想做的事情是这样的:

window.location.href = "some_location";
window.onload = function() {
  alert("I'm the new location and I'm loaded!");
};

加载窗口的新位置时有没有办法进行回调?(上面的代码不起作用。)

4

3 回答 3

17

不,你不能按照你想要的方式去做。加载新页面会关闭当前文档并开始加载新文档。当新页面开始加载时,当前文档中的任何代码都将不再有效。

要在新文档加载时拥有事件处理程序,您需要将代码插入到新页面的文档中,或者将新文档加载到 iframe 中并监控当前文档中 iframe 的加载。

于 2012-12-11T00:23:02.340 回答
3

将 window.location.href 设置为新值会告诉浏览器直接转到下一页。

像这样:

window.location.href = "http://www.google.com/";

一旦浏览器访问 google.com,就是这样,您的 Javascript 将不再执行,并且您无法进行任何类型的回调,因为浏览器不再运行您的页面。

所以,答案是否定的。

于 2012-12-11T00:24:12.713 回答
0

关于新上下文中的回调和 js 执行 - 否(根据原始答案),但有一些方法可以在没有回调的情况下访问加载的元素。例如scrollIntoView,在加载的元素上,您可以附加选择器:

const href = '#someElem'
if(window.location.pathname  !== '/') window.location.href = `/${href}`
else document.querySelector(href).scrollIntoView() 
于 2021-11-27T22:59:31.520 回答