Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery—当外部页面不可用时,从iframe捕获页面加载和卸载';不变_Jquery_Iframe - Fatal编程技术网

JQuery—当外部页面不可用时,从iframe捕获页面加载和卸载';不变

JQuery—当外部页面不可用时,从iframe捕获页面加载和卸载';不变,jquery,iframe,Jquery,Iframe,我在一个网站上工作,它有一个外部菜单,内部内容在一个iframe中。在我正在制作的一个新iframe上,我想运行一些代码,在页面完全加载完成时更改父页面标题(使用$(window.parent.load)。但是,按照框架的编写方式,当您通过菜单导航到一个新的“页面”时,主页不会重新加载—它只会更改iframe内容 所以:当我直接进入新页面时,标题集就起作用了。如果我在另一个页面上,然后导航到新页面,则不会设置标题。如果我然后重新加载页面,它会这样做。因此,我假设在没有重新加载的情况下更改ifra

我在一个网站上工作,它有一个外部菜单,内部内容在一个iframe中。在我正在制作的一个新iframe上,我想运行一些代码,在页面完全加载完成时更改父页面标题(使用$(window.parent.load)。但是,按照框架的编写方式,当您通过菜单导航到一个新的“页面”时,主页不会重新加载—它只会更改iframe内容

所以:当我直接进入新页面时,标题集就起作用了。如果我在另一个页面上,然后导航到新页面,则不会设置标题。如果我然后重新加载页面,它会这样做。因此,我假设在没有重新加载的情况下更改iframe时,没有信号表明新iframe完成时父级已完成,因此“加载”永远不会触发

我确实需要在整个页面加载完成时运行该代码,但是-仅在iframe加载完成时运行是不够的,因为外部页面在iframe加载完成后设置标题,并覆盖我的更改

有没有办法强制我在iframe中的代码最后运行,不管外部页面是否被重新加载


另一半是我在iframe中做的另一件事是在父对象上隐藏一个元素。这很好,但是当我离开时,我需要元素返回。同样,如果父元素没有重新加载,那么该元素将保持隐藏状态。我希望我可以在卸载时取消隐藏,但就像上面的加载一样,如果没有重新加载外部页面,卸载代码似乎不会触发。

听起来像是陷入了困境。 首先也是最重要的一点,我将假设两个URL(父URL和子URL)都位于同一个域中,否则您将向一整罐蠕虫开放自己

如果它们确实位于同一个域上。。。然后: 无论如何,您都无法侦听父页面的
加载
事件。所以不要费心去兔子洞了

相反,您要做的是使用。这允许您在两个帧之间有效地通信

在父级中,在加载iframe之前设置侦听器

window.addEventListener("message", function (ev) {
  if (ev.origin !== "http://my-website.org") return;
  console.log("message is", ev.data)
  document.title = ev.data
}, false)
在iframe的脚本中:

window.postMessage("yo there", "http://my-website.org")

尝试一下,希望你能按照你需要的方式解决问题。在它上面。

听起来你好像陷入了困境。 首先也是最重要的一点,我将假设两个URL(父URL和子URL)都位于同一个域中,否则您将向一整罐蠕虫开放自己

如果它们确实位于同一个域上。。。然后: 无论如何,您都无法侦听父页面的
加载
事件。所以不要费心去兔子洞了

相反,您要做的是使用。这允许您在两个帧之间有效地通信

在父级中,在加载iframe之前设置侦听器

window.addEventListener("message", function (ev) {
  if (ev.origin !== "http://my-website.org") return;
  console.log("message is", ev.data)
  document.title = ev.data
}, false)
在iframe的脚本中:

window.postMessage("yo there", "http://my-website.org")

尝试一下,希望你能按照你需要的方式解决问题。在它上面。

他们在同一个域上,是的。不幸的是,我不确定我是否可以将似乎需要的代码添加到父页面(它是Microsoft CRM,因此我不能直接进入并轻松地进行代码更改…因此需要处理自定义内容的内部iFrame)。我本来以为因为这个原因我不能使用postMessage,但我会进一步证实。他们在同一个域上,是的。不幸的是,我不确定我是否可以将似乎需要的代码添加到父页面(它是Microsoft CRM,因此我不能直接进入并轻松地进行代码更改…因此需要处理自定义内容的内部iFrame)。我原本以为因为这个原因我不能使用postMessage,但我会进一步证实这一点。