【发布时间】:2015-05-22 10:26:11
【问题描述】:
我的应用程序使用 iframe 来显示内容。我需要检测页面是否加载到 iframe 中。问题是我需要用 php 来做,DOM 的 javascript 操作是不够的,我需要在页面加载之前用 php 做一些事情。我在 iframe 内的每个锚点单击上注入像 inframe=1 这样的 get 参数,它可以工作。但是我找不到发布请求的好方法。我尝试使用隐藏的输入字段,但在我的情况下它不起作用,我无法控制它,因为这个应用程序是另一个插件。
我对发布请求的唯一解决方法是检查 iframe 加载,新位置参数是否包含“inframe”,如果不包含,那么我将“inframe”添加到该位置并再次加载链接。它可以工作,但是在表单提交后页面加载了两次。我可以在提交时隐藏 iframe 并在页面第二次加载后显示它,所以它看起来像加载了一次,但仍然加载 2 次明显变慢并且作为解决方案不可接受。
所以这是我不太好的解决方案:
this.iframeReload = function($iframe) { //iframe 加载的事件监听器
var newSrc=$iframe.get(0).contentWindow.location.href;
if (newSrc.indexOf('inframe')==-1) {
console.log('redirecting');
if(newSrc.indexOf('?')==-1) href+='?inframe=1';
else newSrc+='&inframe=1';
$iframe.get(0).contentWindow.location=newSrc;
return 0; //terminate function and reload the iframe with parameter
}
$iframe.ready(function() { /*stuff to do after iframe loads*/ });
}
有没有更好的方法呢?就像在页面加载之前拦截 contentWindow.location 更改并将参数添加到它一样。我在谷歌搜索,我只发现使用加载事件,我已经使用了,它没有 帮助很大。或者也许有完全不同的解决方案?任何想法表示赞赏。我花了将近 4 个小时来处理与此问题相关的事情。
写完之后,我想到了变异观察者。我对此了解不多。它可以跟踪 contentWindow.location 的变化吗?我要试试看。
【问题讨论】:
-
你可以控制
POST的表格吗?如果是,您可以随时将?iniframe=1添加到操作中。 -
我试过了。不幸的是,这与隐藏输入的情况相同。它没有效果。请求的操作不是调用它的文件。所以就像表单在 form.php 上,而动作在 action.php 上。将请求发布到 action.php,action.php 重定向到 form.php,$_POST 为空。我对此无能为力。我无法触摸 post.php 和 action.php。
-
不确定我是否完全关注你。如果
form.php加载并确定在 iFrame 中,则将其位置设置为form.php?iniframe=1并提交到action.php?iniframe=1,然后重定向回form.php?iniframe=1。无论是否是POST表单提交,您都可以随时在$_GET上提交。 -
顺便说一句,看看用
pushState设置位置而不是刷新。 -
然后重定向回form.php。它实际上是 WordPress,但我真的搜索了很多关于如何通过 post 请求传递 get 参数,但我一无所获。
标签: javascript php jquery iframe