0

这似乎应该很简单。任何指针将不胜感激。

考虑三个站点:

  • widgetserver.com,为客户站点提供小部件
  • clientsite.com,显示小部件
  • previoussite.com,这是一个链接到 clientsite.com 的站点

在clientsite.com 的页面中有一段代码调用widgetserver.com 上的PHP 函数。它看起来像这样:

<script type="text/javascript" src="http://widgetserver.com/show_widget.php></script>

加载clientsite.com 后,它会运行“show_widget.php”,然后将小部件放置在页面上。

这就是我卡住的地方:我想从“show_widget.php”内部访问将用户推荐给clientsite.com的站点,但是在这个函数中我们在widgetserver.com上,所以引荐来源是clientsite.com,不是previoussite.com。

有什么办法可以将 clientsite.com 的引荐来源网址传递给“show_widget.php”?

4

3 回答 3

4

document.referrer 包含您想要的引荐来源信息,因此如果他们正在运行 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>

这将需要超出 head 标签(除非它在绑定到文档就绪事件或其他东西的函数中),否则它将失败。

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

如果您的客户使用 jQuery,则使用 $.getScript 会更容易,类似使用 document.referrer

于 2009-10-07T06:44:38.917 回答
1

您无法从您的show_widget.php脚本中“猜测”此信息:客户端必须将该信息传输到您的脚本。

这意味着您的小部件应该包含在这样的代码中(假设客户端上的页面是用 PHP 生成的)

<script 
    type="text/javascript" 
    src="http://widgetserver.com/show_widget.php?referer=<?php echo urlencode($_SERVER['HTTP_REFERER']); ?>>
</script>

当然 :

  • 不要忘记在将引用注入页面时将其转义,以确保安全(并获得有效的 HTML)
  • 引用者可能并不总是存在:它是由用户的浏览器发送的,并且可以被伪造和/或禁用。

为了避免在用户浏览器没有发送引用者时生成/显示“通知:未定义索引:HTTP_REFERER”,您可能还需要添加一个检查,以在使用它之前确定它是否已定义 -isset用于; 例如,这样的事情可能会做:

<script 
    type="text/javascript" 
    src="http://widgetserver.com/show_widget.php?referer=<?php echo isset($_SERVER['HTTP_REFERER']) ? urlencode($_SERVER['HTTP_REFERER']) : ''; ?>>
</script>
于 2009-10-07T05:33:16.743 回答
1

您可以检测到 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'];
?>
于 2009-10-07T05:38:54.533 回答