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 的相关文章

  • IE8 和怪异模式

    IE8 是否像 IE6 7 一样以怪异模式运行 我有一个网页 其中有一些非常奇怪的代码 内容以填充和负边距居中 它在 IE6 7 和其他浏览器中可以正常工作 但在 IE8 中 内容区域的宽度只有一半并且不居中 怪异模式的标志 源代码在 DO
  • F# 正确使用序列缓存

    我正在尝试将 Seq cache 与我制作的函数一起使用 该函数返回最多为 N 的素数序列 不包括数字 1 我无法弄清楚如何将缓存的序列保留在范围内 但仍然使用它在我的定义中 let rec primesNot1 n 2 n gt Seq
  • 蓝牙 LE 中步数计数的服务和特性是什么?

    低功耗蓝牙中步数的服务 特征值 UUID 是什么 蓝牙文档的相应页面没有列出任何步骤 如何计算步数 计步设备是否使用跑步速度和步频服务 谢谢 有些设备确实使用跑步速度和节奏服务 您应该能够通过将 总距离 除以 瞬时步长 两者都可以在RSC测
  • 检查一个数是否是完全平方数?

    我认为以下代码存在精度问题 bool isPerfectSquare long long n long long squareRootN long long sqrt n 0 5 return squareRootN squareRootN
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir
  • 从 Ruby 运行 shell 命令:在显示输出时捕获输出?

    我有个问题 我想从另一个 ruby 脚本运行一个 ruby 脚本并捕获它的输出信息 同时让它也输出到屏幕上 runner usr bin env ruby print Enter your password password gets ch
  • 用于将用户发送至设备应用商店上的应用评论页面的 URL

    为了将 iTunes App Store 置于最前面并打开它以显示应用程序的评论页面 要启动的 URL 是什么 我想将我的用户发送到 撰写评论 页面 其他一些 SO 答案提供了如下 URL 但它似乎不起作用 itms apps itunes
  • 如何在服务器上获取球衣日志?

    我正在使用球衣进行 REST WS 如何在服务器端启用球衣日志 很长的故事 我收到客户端异常 但我在 tomcat 日志中没有看到任何内容 它甚至没有到达我的方法 由于堆栈跟踪显示 toReturnValue 它确实从服务器获取了一些内容
  • JAAS keytab 配置的相对路径

    我有一个系统 其中 NET 客户端使用 Kerberos 针对 Java 服务器进行身份验证 一切正常 但我正在尝试改进服务器配置 目前一个keytab根目录中需要文件C 因为我的jaas配置文件看起来像这样 Server com sun
  • Elastic Beanstalk、Bundler 找不到 gem“bundler”的兼容版本

    我已经尝试过将 Elastic Beanstalk 用于 Rails 当我运行 eb deploy 时出现此错误 我需要至少安装bundler 1 8 4 知道如何解决这个问题吗 Bundler could not find compati
  • Angular2排序数组用于在html中的*ngFor中显示

    我正在循环浏览所有帖子 li 当显示每个帖子的日期时 我会执行以下操作 post date date yyyy MM dd HH mm ss 我想要做的是按最新的第一个顺序显示所有帖子 我尝试过使用类似的管道 li li import Pi
  • 列表框:添加组合框作为项目?

    是否可以将列表框的每个项目都作为组合框 我需要这个 因为我将列表框设置为可检查 然后我需要让用户从列表中每个元素的不同选项中进行选择 Thanks 如果您不打算分发您的应用程序 那么您还可以查看 TreeView 控件 请参阅此示例 COD
  • 如何测试send_file烧瓶

    我有一个小型烧瓶应用程序 它需要上传一些图像并将它们转换为多页 tiff 没什么特别的 但是如何测试多个文件的上传和文件下载呢 我的测试客户端 class RestTestCase unittest TestCase def setUp s
  • CMake 中的 FindSDL2 发生了什么?

    我在游戏中使用 SDL2 我一直使用自定义 FindSDL2 cmake 因为标准 CMake 集中没有 然而 前段时间确实出现了有关 FindSDL2 的帖子 例子 红迪网帖子 https www reddit com r opengl
  • 从外部material-ui组件访问主题

    我有一个使用标准深色主题的主题提供商 我希望能够从我自己的自定义组件访问该主题的详细信息 但我不知道如何做到这一点 在下面的例子中 this props theme未定义 ReactDOM render
  • 在 LP2844Z(Zebra 打印机)上的收据中包含 PNG [重复]

    这个问题在这里已经有答案了 我正在致力于创建一个基于 HTML5 画布的签名 绘图框 目前我们在服务器上将画布保存为PNG 但可以轻松地将base64字符串保存在数据库中 现在的问题是我们如何在打印的收据上添加签名 目前我们使用 GF 字段
  • 为什么 as.character() 返回日期列表中的整数?

    我惊讶地发现 R 中出现以下行为 as character c Sys Date gt 1 2018 02 05 as character list Sys Date gt 1 17567 为什么会出现这种情况 也就是说 显然 17567
  • 如何在不显示父活动的情况下将一个全屏对话框片段替换为另一个全屏对话框片段?

    我有一个使用单个自定义 DialogFragment 类的活动 它的外观是数据驱动的 因此不同的调用看起来可能相当不同 它是 全屏 即 setStyle DialogFragment STYLE NO FRAME android R sty
  • 如何通过API退出Win32应用程序?

    我有一个使用 Win32 API 编写的 C Win32 应用程序 我希望强制它在其中一个函数中退出 有没有类似的东西Exit or Destroy or Abort 类似的东西会终止它吗 哎呀呀呀呀呀呀 不要做任何这些事情 exit 和
  • Google Analytics PHP(发送信息)

    大意 我正在开发一个项目 我需要使用 Google Analytics 服务器端 我不需要检索信息 但我需要发送信息 我最终可以发送 js 脚本客户端 但在这种情况下它不是一个选项 以下大多数链接都非常旧 2012年 检索 不是我需要的 我

随机推荐

  • 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 与其托管页