Google Apps 脚本在 Javascript 中获取 iFrame 的父 URL

2023-12-21

我搜索了很多论坛,并且非常有信心这将是“否”,但我想我会将其向社区开放,以防万一;)

我的任务是在 Google 协作平台页面上创建一个工具,用于记录员工访问页面后的访问时间。它有助于确认文档访问和活动日志的合规性。如果 iFrame 与其托管页面位于同一域中,则从框架内查询父页面的 URL 相当容易,但安全限制限制了跨域或子域的这种操作。

我希望将 Google 应用程序脚本嵌入到 Google 网站页面中这一事实将为我提供更多选择。到目前为止,我已经尝试过命令文档.referrer, 父文档位置, 父窗口文档位置, 父窗口位置, 父.文档.位置.href,以及从窗口和文档角度看的相同命令。他们的反应都是一样的:

  https://n-labp6vtqrpsdn12345neycmicqw7krolscvdkda-0lu-script.googleusercontent.com/userCodeAppPanel

当我想要:

 https://sites.google.com/mysite.com/mysite/test/test3

谷歌老手还有更多的技巧吗?

编辑:我刚刚尝试通过 html 链接将变量传递给 Google 站点上的 Apps 脚本的 Google 图像占位符,并取得了一些进展。你看,我可以运行这个网址:如果我在单独的窗口中运行 url,则获取变量 test1 和 test2。如果我尝试将该 URL 嵌入到 Google 协作平台上的 HTML 页面中,则会抛出以下混合内容错误:

  trog_edit__en.js:1544 Mixed Content: The page at 
 'https://sites.google.com/a/mysite.com/mysite/test/test3' was loaded over HTTPS, but requested an insecure image 'http://www.google.com/chart?chc=sites&cht=d&chdp=sites&chl=%5B%5BGoogle+Apps+Script%27%3D20%27f%5Cv%27a%5C%3D0%2710%27%3D499%270%27dim%27%5Cbox1%27b%5CF6F6F6%27fC%5CF6F6F6%27eC%5C0%27sk%27%5C%5B%22Apps+Script+Gadget%22%27%5D%27a%5CV%5C%3D12%27f%5C%5DV%5Cta%5C%3D10%27%3D0%27%3D500%27%3D197%27dim%27%5C%3D10%27%3D10%27%3D500%27%3D197%27vdim%27%5Cbox1%27b%5Cva%5CF6F6F6%27fC%5CC8C8C8%27eC%5C%27a%5C%5Do%5CLauto%27f%5C&sig=TbGPi2pnqyuhJ_BfSq_CO5U6FOI'. This content should also be served over HTTPS.

也许有人尝试过这种方法吗?


简而言之 - 我知道不可能从 Google 协作平台中的 iFrame 调查父 URL。

iframe/嵌入内容的内容托管在各处,与网站本身分开。正如您所发现的那样,同源规则会阻止检查。

您的第一个网址“https://n-labp...googleusercontent.com https://n-labp...googleusercontent.com...”是脚本本身的托管位置。脚本的任何输出(例如 HTML)都将显示为来自此处。

您可以使用嵌入功能将 HTML 和 javascript 直接嵌入到站点中。如果你调查一下,你会发现它托管在类似“https://1457130292-atari-embeds.googleusercontent.com https://1457130292-atari-embeds.googleusercontent.com..."

调用parent 将始终给出这个基于*-atari 的URL,而不是它托管的实际页面。

一个相当轻量级的解决方案是结合使用两者。 使用简单的 doGet ping 并处理 Apps 脚本中的工作。

在您的网站上,使用嵌入功能插入:

<!DOCTYPE html>
<html>
<body onbeforeunload="return depart()">
<script>
var page = "testpage"; // manually set a name for each page you paste this code in to
var script = "https://script.google.com/macros/s/... your script, ending with exec ...";

fetch(script+"?page="+page+"&direction=arrive");

function depart(){
fetch(script+"?page="+page+"&direction=depart");
}
</script>
</body>
</html>

然后在您的 Apps 脚本中:

function doGet(e){
var httpParams = e.parameter ? e.parameter : "";
// params is an object like {"page": "testpage1", "n": "1"}
var getPage = httpParams.page ? httpParams.page : "";
var getDirection = httpParams.direction ? httpParams.direction : "";

/* Handle it as you please, perhaps like: */

var user = Session.getActiveUser().getEmail();
/* maybe use a temporary active key if open to non-Google users */
/* first-time Google users will have to authenticate, so embed one frame somewhere full-size maybe, or just tell users to go to the script's link */

/* hand off to a helper script */
var time = new Date();
var timeUTC = time.toUTCString(); // I like UTC
doSomethingWithThis(user, direction, timeUTC);
/* etc... */

/* Return some blank HTML so it doesn't look too funny */
return HtmlService.createHtmlOutput("<html><body></body></html>");
}

然后发布为网络应用程序。如果您使用临时活动密钥而不是 Google 帐户,则脚本将以您的身份运行,并且可供任何人使用,甚至是匿名的。

您可能已经解决了这个问题,但我希望它对其他偶然发现它的人有用!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Apps 脚本在 Javascript 中获取 iFrame 的父 URL 的相关文章

随机推荐

  • localStorage 与 SQLite?

    我正在为 Chrome 构建一个打包应用程序 查看我的数据库选项 我很好奇我是否理解使用这些选项的正确方法 使用 SQLite 我会创建表books与以下行 id title category date price qty sold 使用
  • UICollectionViewCell 不强制单元格大小

    我在用 func collectionView collectionView UICollectionView layout collectionViewLayout UICollectionViewLayout sizeForItemAt
  • 在 CQRS 中实现基于集合的约束

    我仍在努力解决与 CQRS 风格架构相关的基本 和已解决 问题 我们如何实现依赖于的业务规则a set的聚合根 以预订应用程序为例 它可以帮助您预订音乐会门票 电影座位或餐厅餐桌 在所有情况下 只会有数量有限待售 物品 让我们想象一下该事件
  • 引导程序尝试加载地图文件。如何禁用它?我需要这样做吗?

    最近在玩bootsrap3 我从源代码编译它并将 distr js 和 css 包含到我的项目中 问题是 我在 GH 开发工具中看到 它正在尝试获取 map css 文件 它为什么要这样做 如何禁用它 我需要禁用它吗 为了不在开发工具中出现
  • 如何修复来自glad.c的对符号“dlclose@@GLIBC_2.2.5”的未定义引用[重复]

    这个问题在这里已经有答案了 我正在按照以下教程学习 Openglhttps learnopengl com https learnopengl com 我在使用 cmake 设置依赖关系时遇到问题 请参阅创建窗口 https learnop
  • 如何转换 wx.GetMousePosition 坐标以适合 DC

    我正在创建一个照片查看器 用户可以使用它来标记图像 就像在 Facebook 中一样 单击要标记的图像后 我使用 wx GetMousePosition 查找鼠标在图像上单击的位置 然后 我创建用户已标记的图像的 wx MemoryDC 以
  • Rails媒体文件流通过send_data或send_file方法接受字节范围请求

    我有以下问题 声音在公共文件夹中隐藏 因为只有某些用户有权访问声音文件 所以我做了一个特定的方法 它的作用就像一个声音url 但首先计算当前用户是否允许访问这个文件 文件通过 send data 方法发送 问题是 如果它甚至可以工作的话 它
  • 无法导入名称 izip [重复]

    这个问题在这里已经有答案了 我正在尝试使用以下代码从 csv 文件转置矩阵 import csv from itertools import izip a izip csv reader open TDM csv rb csv writer
  • InAppBrowser 仅在我的域已打开时允许导航

    我知道有一千个线程在谈论这个话题 但事实是 真正阅读它们并执行它们所说的内容 我找不到关键 而且 我已经阅读并尝试了很多 我的问题如下 我正在使用 InAppBrowser 模块 InAppBrowser from ionic native
  • 无法使用 Visual Studio 2010 Express 配置 CMake

    有人可以帮助我吗 我正在尝试使用 Visual Studio 2010 Express 配置 CMake 但失败了 整个错误消息如下 C 编译器标识为 MSVC 16 0 30319 1 CXX 编译器 标识是 MSVC 16 0 3031
  • ExpressJS 中的路由处理程序和中间件函数有什么区别?

    我的理解是 中间件函数是一个路由处理程序 但它可以调用下一个函数参数以将控制权传递给堆栈上的中间件函数 这是标准路由处理程序和中间件函数之间的唯一区别吗 你所说的大部分内容都是语义 在 ExpressJS 中 中间件可以是路由处理程序 或者
  • 防止脚本在页面刷新时重新执行操作

    我正在构建自己的php cart在过去的一周里 我陷入了一些问题 我成功在购物车中添加了新商品 URL 如下所示 http blah blah com order index php action add id 84 问题很简单 如何防止在
  • 雅虎财经有数据请求上限吗?有替代方案或解决方法吗?

    你好呀 我已扫描此网站和 Google 以获取有关从雅虎财经下载股票信息的最新更新 我没有取得太大的成功 当我测试我的应用程序时 我使用以下 C 代码片段遇到了 404 服务器未找到异常 string urlTemplate http ic
  • 如何打开文件浏览器? (安卓SDK)

    如何使用 Android SDK 打开文件浏览器 如文件管理器 是否有某种意图或其他目的 不幸的是 没有内置的方法可以做到这一点 您可以尝试使用OI 文件管理器 http openintents org en filemanager 它非常
  • xmllint:非根 xml 元素上的 xmlns?

    xmllint xpath project test xml fails on
  • JDK 对实体扩展的限制

    我在转换大型 XML 文档期间收到此错误消息 JAXP00010001 解析器在本文档中遇到了超过 64000 个实体扩展 这是 JDK 施加的限制 Googled and learned about limits http docs or
  • 如何在 Maven 中启动单个目标/执行

    目前我正在调试 Android 应用程序的签名 如果我可以执行这个唯一的插件 这会容易得多
  • Java openCV - 将位图转换为 Mat 时出错

    我正在使用 Java openCV 我尝试加载一张照片并对其运行模板匹配 模板匹配方法处理Mat对象 所以我需要加载图像并将它们转换为Mat 我这样做的方法是 Bitmap i BitmapFactory decodeFile sdcard
  • 将 JSplitPane 与 AWT 组件结合使用

    我有一个 AWT 画布 无法将其转换为 Swing 组件 它来自VTK http www vtk org 我希望在 JSplitPane 中显示其中一些画布 我读过有关在 Java 中混合重型和轻型组件的内容 并且知道这是一件令人痛苦的事情
  • Google Apps 脚本在 Javascript 中获取 iFrame 的父 URL

    我搜索了很多论坛 并且非常有信心这将是 否 但我想我会将其向社区开放 以防万一 我的任务是在 Google 协作平台页面上创建一个工具 用于记录员工访问页面后的访问时间 它有助于确认文档访问和活动日志的合规性 如果 iFrame 与其托管页