3

我将在 iframe 中的站点上运行代码,该代码可能是跨域的,也可能不是跨域的,并且可能在多个 iframe 中重复。我可能在顶部窗口中运行了代码,我可能没有。我希望我的 JS 生成一个唯一标识符,如果它是由我的代码在该页面上的任何 iframe、多个 iframe、嵌套在 iframe 中的 iframe 或顶部窗口中的代码生成的,在该负载的整个生命周期内该标识符都是相同的仅限主页。

在当时为该用户加载的网页的任何窗口上下文中运行时,它应该生成相同的标识符。因此,如果删除了一个 iframe,添加的另一个 iframe 应该会生成相同的 id。

为此使用的最佳信息是什么?它本质上是一个“会话”ID,但需要在浏览器中生成,并且对于生成它的任何子 iframe 都是相同的。感谢任何能提供帮助的人!

4

2 回答 2

1

经过一番阅读,似乎制作浏览器指纹将是解决方案。这些 github 项目很有帮助:

我可能会使用其中之一,或者获得一些想法来实现我自己的简化解决方案。

于 2016-02-04T02:18:54.797 回答
0

我不能 100% 确定这是否能回答您的问题,但我生成随机字符串的首选方法部分受到 MongoDB 生成唯一对象 ID 的方式的启发:

var uniqueString = Date.now().getTime() + Math.random();

除非您有成千上万的用户都在完全相同的毫秒内运行此代码,否则您应该得到一个随机字符串。

编辑

该问题在顶部窗口中提到了正在运行的代码。有了这个,有多种解决方案可以工作:

  • 使用PostMessage API向页面上的所有 iframe 发送相同的随机 id
  • 使用随机 id 作为查询字符串部署 iframe(例如http://www.example.com/mypage?id=123

但是,如果您无法在顶部窗口中执行代码,则必须在服务器端执行操作。在这里我不太确定我会怎么做,因为我不确定你在后端使用什么,但在 Node.js 中你可以检查req对象。它将包含诸如用户的 IP 地址、他们的用户代理字符串、请求的日期等内容。连接 IP 地址、用户代理字符串,也许还有引用页面(即您的用户正在查看的加载 iframe 的页面)应该给出给定用户给定页面上所有框架的唯一 ID。

于 2016-01-30T19:17:52.263 回答