PHP重定向但在父框架中

时间:2014-08-02 14:44:43

标签: php mysql sql redirect frame

我使用简单的PHP脚本和MySQL在 http://thetpg.tk缩短了一小段时间。 它的作用是获取id并在SQL数据库中将其匹配,并使用header()将其重定向到数据库中找到的指定链接。

但是如果我有一个带有源代码的框架集,就像http://thetpg.tk那样,重定向的链接被加载到框架而不是父窗口。

例如看看

的页面来源
  1. http://thetpgmusic.tk,其框架来源为
  2. http://thetpg.tk/b进一步重定向到
  3. http://thepirategamer.tk/music.php
  4. 我希望(1)加载(3)作为父级,但只需在(2)中的函数中进行更改。 那么有像

    这样的功能吗?

    header(Location:http://thepirategamer.tk/music.php, '_parent'); 在PHP中,还是有其他方法来实现它?

    注意:我无法改变(2)中的任何内容。

    提前致谢! :)

1 个答案:

答案 0 :(得分:4)

有一些树解决方案可以帮助您实现此目的:


第一个解决方案:

如果您使用echo生成html代码,此解决方案可能涉及php,当您需要输出a标记时,应确保添加属性target='_parent'

<?php
        echo '<a href="' . $url . '" target="_parent"> Click here </a>';
?>

问题:

此解决方案的问题在于,如果您需要在父窗口中从您不拥有的页面(在iframe内)重定向,则它不起作用。第二个解决方案解决了这个问题


第二个解决方案:

这第二个解决方案完全是客户端的,这意味着你需要使用一些javascript。你应该定义一个javascript函数,在每个target='_parent'标记中添加a

function init ()  
{
      TagNames = document.getElementById('iframe').contentWindow.document.getElementsByTagName('a');
      for( var x=0; x < TagNames.length; x++ )
            TagNames[x].onclick = function()
            { 
                   this.setAttribute('target','_parent'); 
            }
};

现在你需要做的就是在像这样加载正文时调用这个函数

<body onload="init();"> ... </body>

问题:

此解决方案的问题在于,如果您的链接包含此href="#"之类的锚,则会将父窗口更改为子窗口要解决此问题,您必须使用第三个解决方案< / p>


第三种解决方案:

此解决方案也是客户端,您必须使用javascript。它类似于第二种解决方案,除了您必须在重定向之前测试链接是外部页面的URL还是锚点。所以你需要定义一个函数,如果它是一个指向外部页面的链接,则返回true;如果它是一个简单的锚点,则返回false,然后你必须像这样使用这个函数

function init ()  
{
      TagNames = document.getElementById('iframe').contentWindow.document.getElementsByTagName('a');
      for( var x=0; x < TagNames.length; x++ )
            TagNames[x].onclick = function()
            { 
                   if ( is_external_url( this.href ) )
                       document.location = this.href;
            }
};

并且还需要在加载正文时调用此函数

<body onload="init();"> ... </body>

不要忘记定义is_external_url()



更新:

以下是获取最后一个孩子的网址的解决方案,它只是一个简单的函数,可以从paages中的框架和iframe查看并获取网址

function get_last_url($url)
{
    $code = file_get_contents($url);
    $start = strpos($code, '<frameset');
    $end = strpos($code, '</frameset>');
    if($start===false||$end===false)
    {
        $start = strpos($code, '<iframe');
        $end = strpos($code, '</iframe>');
        if($start===false||$end===false)
            return $url;
    }
    $sub = substr($code, $start,$end-$start);
    $sub = substr($sub, strpos($sub,'src="')+5);
    $url = explode('"', $sub)[0];
    return get_last_child($url);
}

$url = get_last_url("http://thetpgmusic.tk/");
header('Location: ' . $url);
exit();