【问题标题】:How to get the URL of a page where a Google Script Gadget is embedded如何获取嵌入了 Google Script Gadget 的页面的 URL
【发布时间】:2012-07-17 00:35:55
【问题描述】:

我正在寻找一种方法,该方法允许我获取嵌入了 Google 脚本小工具的当前页面的 URL。

我尝试使用 getActivePage() 但这只会返回我的 Google 站点的主页。根据这个问题:http://code.google.com/p/google-apps-script-issues/issues/detail?id=568 get active site and get active page 是有缺陷的,但那是在 2011 年 9 月...

这是我的代码:

    var site = SitesApp.getActivePage();

我是否错误地使用了 getActivePage()?

提前感谢您的帮助。

编辑 1 次尝试:

  var templates = site.getTemplates();
  var template;
  var names = '';
  for (var i = 0; i < templates.length; i++) {
    if (templates[i].getName() == 'profile') {
      template = templates[i];
      break;
    }
  }
  if (template != null) {
    var pageName = name;
    Logger.log('Found: ' + pageName);
    site.createPageFromTemplate(pageName, pageName, template);
  }
  else {
    Logger.log('Not Found');
  }

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    我创建了以下脚本

    function doGet(e) {
      var app = UiApp.createApplication();
      var lbl = app.createTextArea();
      lbl.setWidth('100%');
      lbl.setHeight('100%');
      var txt = SitesApp.getActivePage().getUrl();
      lbl.setText(txt);
      app.add(lbl);
      return app;
    }
    

    还有几页嵌入了与此脚本链接的 Google 脚本小工具。该脚本的输出与 Internet 浏览器地址栏中的 URL 相同。

    @LehanCoetzee 代码。

        var templ = HtmlService.createTemplateFromFile('profile').evaluate();
        site.createPageFromTemplate(name + ' ' + surname, name, templ);
    

    'profile' 是我通过应用程序脚本编辑器创建的 html 模板。

    编辑 01: 我创建了一个模板页面,其中包含一个链接到我上面的脚本的小工具。脚本的名称是ProfileTemplate。我还使用以下脚本创建了一个新页面。

    function doGet(e) {
      var app = UiApp.createApplication();
      var panel = app.createVerticalPanel();
      var tb = app.createTextBox().setName('tb').setId('tb');
      var btn = app.createButton().setText('Create').setId('btn');
      var out = app.createTextArea().setId('out');
      var handler = app.createServerHandler('onBtnClick');
      handler.addCallbackElement(panel);
      btn.addClickHandler(handler);
      panel.add(tb);
      panel.add(btn);
      panel.add(out);
      app.add(panel);
      return app;
    }
    
    function onBtnClick(e) {
      var app = UiApp.getActiveApplication();
      var site = SitesApp.getActiveSite();
      var out = app.getElementById('out');
      var templates = site.getTemplates();
      var template;
      var names = '';
      for (var i = 0; i < templates.length; i++) {
        if (templates[i].getName() == 'profiletemplate') {
          template = templates[i];
          break;
        }
      }
      if (template != null) {
        var pageName = e.parameter.tb;
        out.setText('Found: ' + pageName);
        site.createPageFromTemplate(pageName, pageName, template);
      }
      else {
        out.setText('Not Found');
      }
      return app;
    }
    

    如果要打开新页面,键入文本,例如 test1 或 test2,然后单击 Create 按钮,则会从模板创建一个新页面。模板页面将具有类似于 https://sites.google.com/a/..../.../test1 的 URL 用于文本“test1”,并且小工具的输出将包含此文本。

    【讨论】:

    • 谢谢。我还做了一个测试,我创建了一个新页面,然后插入了小工具,然后它返回了正确的 URL。但是它在以下情况下仍然不起作用:我有一个脚本,它通过获取另一个页面的 html 内容来创建一个新页面,该页面填充有两个小工具和一些 html。似乎在通过脚本创建该页面后,小工具出于某种原因将 URL 输出为网站主页,而不是它所在的实际页面。
    • @LehanCoetzee:我没有深入挖掘,但是如何使用 Site 类 createPageFromTemplate 函数而不是页面 HTML 内容复制。
    • 我不确定我的操作是否正确,您能否检查一下我的代码是否正确?我会将其粘贴在我原来的问题下方。
    • @LehanCoetzee:参见编辑 01。因此,SitesApp.getActivePage() 函数可以正常工作。
    • 我尝试使用您的代码,但无法正常工作。 site.getTemplates() 似乎没有执行。我认为这可能是因为“站点”是使用 SitesApp.getSiteByUrl() 声明的,而您在其中使用了 getActiveSite()。我的代码是从表单提交触发器执行的,并且表单没有嵌入到页面中,所以我无法获取 ActiveSite。再次感谢您的帮助,对于给您带来的麻烦,我深表歉意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多