【问题标题】:What are these Google-calendar events from?这些 Google 日历活动来自什么?
【发布时间】:2015-08-29 18:11:26
【问题描述】:
获取 Google 日历嵌入代码的内容并在其中添加样式表(manually 或通过 PHP script 之类的东西)并显示自定义样式的公共日历似乎是相当普遍的做法.
奇怪的是,我注意到如果您单击顶部的打印按钮或右下角的“Google 日历”,它会转到 localhost 或页面所在的任何域 - 而不是 Google 日历。
如果您尝试通过 Chrome 开发工具或通过 Firefox 使用 gcal$func$[3].toSource(); 跟踪“gcal$func$[3]();”onclick,它不会找到它或说
"function () {
[native code]
}"
那么这个函数是从哪里来的,你如何调整它以使它在一个新窗口中打开,使用谷歌 url,而不是当前域 (404)?
【问题讨论】:
标签:
javascript
calendar
google-calendar-api
google-chrome-devtools
firefox-developer-tools
【解决方案1】:
根据谷歌日历嵌入JS代码,函数指向如下代码
window.open(Pf(this.c.i.Nb + "/render", "cid", b))
this.c.i.Nb 表示基本 URL,默认情况下,它是脚本运行的域(在您的情况下是您的域)。但是,它的目的是成为 google.com 域,幸运的是,改变它很容易。 baseURL 是初始化脚本中的参数之一(在您正在抓取的页面中声明),您只需将其配置为https://www.google.com。
如果您使用 PHP,您的代码可能如下所示。
$page = new DOMDocument("1.0", "utf-8");
// grab the Google Calendar code
$page->loadHTMLfile("https://www.google.com/calendar/embed?src=yourcalendar%40gmail.com");
// set up the baseUrl and print the grabbed page
echo str_replace('"baseUrl":"/"', '"baseUrl":"https://www.google.com/"', $page->saveHTML());
现在所有链接都应该可以正常工作了。