如何将HTTP引用传递给PHP脚本

如何将HTTP引用传递给PHP脚本,php,referrer,Php,Referrer,这看起来应该很简单。任何指点都将不胜感激 考虑三个地点: widgetserver.com,为客户端站点提供小部件 clientsite.com,其中显示小部件 previoussite.com,这是一个链接到clientsite.com的网站 在clientsite.com的页面中,有一段代码调用widgetserver.com上的PHP函数。看起来是这样的: <script language="javascript" type="text/javascript"> var s

这看起来应该很简单。任何指点都将不胜感激

考虑三个地点:

  • widgetserver.com,为客户端站点提供小部件
  • clientsite.com,其中显示小部件
  • previoussite.com,这是一个链接到clientsite.com的网站
在clientsite.com的页面中,有一段代码调用widgetserver.com上的PHP函数。看起来是这样的:

<script language="javascript" type="text/javascript">
var script = document.createElement("script");
script.src = "http://widgetserver.com/show_widget.php?r="+document.referrer;
document.getElementsByTagName("head")[0].appendChild(script);
</script>
您无法从
show\u widget.php
script“猜测”此信息:clientsite必须将该信息传输到您的脚本

这意味着您的小部件应该包含以下代码(前提是clientsite上的页面是用PHP生成的):

您不能从
show\u widget.php
script“猜测”此信息:clientsite必须将此信息传输到您的脚本

这意味着您的小部件应该包含以下代码(前提是clientsite上的页面是用PHP生成的):


您可以在clientside.com的主脚本上检测引用的,并将其作为变量传递给您的脚本:

// clientsite.com script
<?PHP

    echo $main_page;
    $ref = $_SERVER['HTTP_REFERER'];
    echo '<script type="text/javascript" ' .
      'src="http://widgetserver.com/show_widget.php?r=' . $ref . '></script>';

?>

// widgetserver.com script
<?PHP
    $original_referrer = $_REQUEST['r'];
?>
//clientsite.com脚本
//widgetserver.com脚本

您可以检测clientside.com主脚本上的引用,并将其作为变量传递给脚本:

// clientsite.com script
<?PHP

    echo $main_page;
    $ref = $_SERVER['HTTP_REFERER'];
    echo '<script type="text/javascript" ' .
      'src="http://widgetserver.com/show_widget.php?r=' . $ref . '></script>';

?>

// widgetserver.com script
<?PHP
    $original_referrer = $_REQUEST['r'];
?>
//clientsite.com脚本
//widgetserver.com脚本

document.referer包含您想要的referer信息,因此如果他们正在运行javascript,您可以执行以下操作:

<script language="javascript" type="text/javascript">
var script = document.createElement("script");
script.src = "http://widgetserver.com/show_widget.php?r="+document.referrer;
document.getElementsByTagName("head")[0].appendChild(script);
</script>

var script=document.createElement(“脚本”);
script.src=”http://widgetserver.com/show_widget.php?r=“+document.referer;
document.getElementsByTagName(“head”)[0].appendChild(脚本);
这需要超出head标记的范围(除非它位于绑定到documentready事件或其他东西的函数中),否则它将失败

这背后的想法是在页面上生成一个具有所需属性的动态标记。第一行创建它,第二行设置脚本src,第三页将其加载到document.head DOM元素中,这将导致对其进行计算,并根据需要加载文档


如果您的客户机使用jQuery,则使用$.getScript会更容易,与document.referer类似。referer包含您需要的referer信息,因此如果他们运行javascript,您可以执行以下操作:

<script language="javascript" type="text/javascript">
var script = document.createElement("script");
script.src = "http://widgetserver.com/show_widget.php?r="+document.referrer;
document.getElementsByTagName("head")[0].appendChild(script);
</script>

var script=document.createElement(“脚本”);
script.src=”http://widgetserver.com/show_widget.php?r=“+document.referer;
document.getElementsByTagName(“head”)[0].appendChild(脚本);
这需要超出head标记的范围(除非它位于绑定到documentready事件或其他东西的函数中),否则它将失败

这背后的想法是在页面上生成一个具有所需属性的动态标记。第一行创建它,第二行设置脚本src,第三页将其加载到document.head DOM元素中,这将导致对其进行计算,并根据需要加载文档


如果您的客户机使用jQuery,那么使用$.getScript会更容易,与使用document.referer类似,但正如您所指出的,这假设clientsite页面是在PHP中生成的。是否有任何方法可以使用javascript而不是php将引用传输到“show_widget.php”?谢谢,但正如您所指出的,这假设clientsite页面是在php中生成的。有没有办法用javascript而不是php来将引用者传输到“show_widget.php”?这似乎是正确的方法,其他答案都是php。谢谢-这看起来正是我想要的。我来试一试。@XwipeoutX,你能更详细地解释一下这种方法吗?我按原样尝试了上面的代码,但得到了一个空白屏幕。似乎DOM被一个平凡的页面所取代@格雷格:我在那里为你添加了一些额外的信息,我在本地进行了测试,在我这边效果很好。仔细检查您在头标记后或在文档中对其进行评估。就绪事件,这是我的问题guess@XwipeoutX,谢谢,这澄清了代码的作用。我认为问题在于我的“show widget.php”在我放置此脚本的文件中使用“document.write()”编写了一些HTML(小部件)。因此,将脚本加载到document.head DOM元素中会放错位置。有什么方法可以代替将javascript添加到document.head中而就地执行它吗?这似乎是正确的方法,其他答案都是PHP。谢谢-这看起来正是我想要的。我来试一试。@XwipeoutX,你能更详细地解释一下这种方法吗?我按原样尝试了上面的代码,但得到了一个空白屏幕。似乎DOM被一个平凡的页面所取代@格雷格:我在那里为你添加了一些额外的信息,我在本地进行了测试,在我这边效果很好。仔细检查您在头标记后或在文档中对其进行评估。就绪事件,这是我的问题guess@XwipeoutX,谢谢,这澄清了代码的作用。我认为问题在于我的“show widget.php”在我放置此脚本的文件中使用“document.write()”编写了一些HTML(小部件)。因此,将脚本加载到document.head DOM元素中会放错位置。我有没有办法就地执行javascript,而不是将其添加到document.head?