javascript - Javascript 重定向不适用于 IFrame,无需 IFrame 也可工作

标签 javascript php iframe

我正在使用 PHP 表单来收集信息。我希望它在按下提交按钮时重定向到同一域上的页面。如果您转到 php 表单,但不是 iframed php 表单,它可以正常工作。代码如下。

define( 'PHPFMG_REDIRECT', 'http://propertytaxdfw.com/thank-you-sign-up.html' );
function phpfmg_thankyou(){
// move the redirect to phpfmg_thankyou() to get around the redirection within an iframe problem
        /*
        $redirect = PHPFMG_REDIRECT;
        if( strlen(trim($redirect)) ):
            header( "Location: $redirect" );
            exit;
        endif;
        */
    phpfmg_redirect_js();
?>

<!-- [Your confirmation message goes here] -->
    <br>

    <b>It Worked!</b>
    <br><br>

<?php

} // end of function phpfmg_thankyou()

我认为这就是问题所在。如果需要,我可以提供额外的代码。我提前感谢您的帮助。我在这里读了很多东西试图找到答案,但我觉得我被困住了。

表格:http://propertytaxdfw.com/SignUpFormFiles/form.php iframe 所在页面:http://propertytaxdfw.com/sign-up.html

function phpfmg_redirect_js(){
    if( defined('PHPFMG_REDIRECT') && '' != PHPFMG_REDIRECT ){
        echo "<script type='text/javascript'>
            function phpfmg_redirect(){
                var redirect = '" . addslashes(PHPFMG_REDIRECT) . "';
                try{
                    if( parent ) parent.location.href = redirect;
                }catch(e){
                    location.href = redirect;
                };
            }

            phpfmg_redirect();
        </script>";
    };

最佳答案

更新 6 错误:

必须删除第二个和第三个括号。

   this.submitOK = function(){
  window.top.location.href = redirect; 
}
    }


}

更新 6

删除

    if( redirect == '' ){
        showThankYouMessage();
        return;
    };

try{
    if( parent ) {alert('parent');parent.location.href = redirect;}

}catch(e){  alert('frame');
    location.href = redirect;
};

并替换为这一行:window.top.location.href = redirect; .

this.submitOK = function(){
  window.top.location.href = redirect; 
}

更新5

删除之前的警报并在下面添加另外两个警报:父级警报和框架。

this.submitOK = function(){
    if( redirect == '' ){
        showThankYouMessage();
        return;
    };

try{
    if( parent ) {alert('parent');parent.location.href = redirect;}

}catch(e){  alert('frame');
    location.href = redirect;
};

}

更新 4

位于 form.lib.php 第 2484 行(可能因之前的编辑而有所不同)

添加行 alert('OK');

然后,当提交表单时,会弹出一个消息框“确定”。

   this.submitOK = function(){
   alert('OK');

        if( redirect == '' ){
            showThankYouMessage();
            return;
        };

        try{
            if( parent ) parent.location.href = redirect;
        }catch(e){
            location.href = redirect;
        };
    }

更新 4 结束

<小时/>

更新3

在 form.lib.php 第 11 行

define( 'PHPFMG_REDIRECT', '' );

必须是:

define( 'PHPFMG_REDIRECT', 'http://propertytaxdfw.com/thank-you-sign-up.html' );

更新 3 结束

更新2

如果您能找到添加此代码的位置。

function PHPFMG( formID ){
    var frmID = formID;
    var exts = {
        'upload_control' : '',
        'harmful_exts'  : '.php, .html, .css, .js, .exe, .com, .bat, .vb, .vbs, scr, .inf, .reg, .lnk, .pif, .ade, .adp, .app, .bas, .chm, .cmd, .cpl, .crt, .csh, .fxp, .hlp, .hta, .ins, .isp, .jse, .ksh, .Lnk, .mda, .mdb, .mde, .mdt, .mdw, .mdz, .msc, .msi, .msp, .mst, .ops, .pcd, .prf, .prg, .pst, .scf, .scr, .sct, .shb, .shs, .url, .vbe, .wsc, .wsf, .wsh',
        'harmful_errmsg': "File is potential harmful. Upload is not allowed.",
        'allow_exts'  : '.jpg, .gif, .png, .bmp',
        'allow_errmsg': "Upload is not allowed. Please check your file type."
    };
    var redirect = "http://propertytaxdfw.com/thank-you-sign-up.html";

移动var redirect = "http://propertytaxdfw.com/thank-you-sign-up.html";

到函数上方

var redirect = "http://propertytaxdfw.com/thank-you-sign-up.html";
function PHPFMG( formID ){
    var frmID = formID;
    ...

或者替换redirect使用 theis 函数中的实际 URL:
删除if( redirect == '' ){

this.submitOK = function(){
        if( redirect == '' ){
            showThankYouMessage();
            return;
        };

        try{
            if( parent ) parent.location.href = redirect;
        }catch(e){
            location.href = redirect;
        };
    }

更改为:

this.submitOK = function(){
        try{
            if( parent ) parent.location.href = 'http://propertytaxdfw.com/thank-you-sign-up.html';
        }catch(e){
            location.href = redirect;
        };
    }

更新 2 结束

<小时/>

我不太喜欢重定向。

大多数情况下,使用重定向时都是简单的 include()readfile() .

重定向的问题是它需要浏览器执行额外的(且不必要的)HTTP 请求。

为什么要在没有必要时进行重定向?

在您的情况下,它可能会在重定向不起作用的情况下起作用。

其中任何一个都应该可以正常工作。

if( strlen(trim($redirect))){
  readfile($redirect);
  exit;
}
if( strlen(trim($redirect))){
  include($redirect);
  exit;
}
if( strlen(trim($redirect))){
  echo file_get_contents($redirect);
  exit;
}

更新 1

所需的重定向 JS 不在 iFrame 中:https://propertytaxdfw.com/SignUpFormFiles/form.php

函数 phpfmg_redirect_js() 未在 PHP 中执行,或者 defined('PHPFMG_REDIRECT')未定义,或 PHPFMG_REDIRECT是一个空字符串 ('' != PHPFMG_REDIRECT)

有两件事要尝试:
将其添加到 PHP 中:

define("PHPFMG_REDIRECT", "http://propertytaxdfw.com/thank-you-sign-up.html");

或者将其添加到 PHP 中:

    echo "<script type='text/javascript'>
    function phpfmg_redirect(){
      var redirect = '" . addslashes(PHPFMG_REDIRECT) . "';
      try{
      if( parent ) parent.location.href = redirect;
      }catch(e){
        location.href = redirect;
      };
    }
    phpfmg_redirect();
</script>";

当 PHP 创建页面时,如果在现有的 JS 中找到上述 JS
<script type='text/javascript'> </script>
然后将代码更改为:

    echo "\nfunction phpfmg_redirect(){
      var redirect = '" . addslashes(PHPFMG_REDIRECT) . "';
      try{
      if( parent ) parent.location.href = redirect;
      }catch(e){
        location.href = redirect;
      };
    }
    phpfmg_redirect();\n";

关于javascript - Javascript 重定向不适用于 IFrame,无需 IFrame 也可工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29504353/

相关文章:

javascript - 绘制圆弧,取决于输入的时间

javascript - 在 JavaScript 中通过赋值声明变量类型的好处

php - 无法在实时服务器中将 shell_exec 用于 laravel artisan 命令

javascript - 尝试查看 IFRAME 的父级时如何解决访问被拒绝的问题

ruby-on-rails - X-Frame-Options ALLOW-FROM 特定站点允许所有

javascript - Javascript 中的乘法持久性程序不起作用

javascript - 使用 javascript 创建一个 asp.net 身份验证 cookie

删除选定行时更新数据库中其他行顺序的 PHP 代码

javascript - 相当于 PHP 的 yaml 中的express app.get ("/:users/:names")?

javascript - 防止 iframe 加载响应式设计