【问题标题】:How to open a URL link from JavaScript inside a Google Apps Script HTML Google Site Gadget如何从 Google Apps Script HTML Google Site Gadget 中的 JavaScript 打开 URL 链接
【发布时间】:2014-02-12 19:26:17
【问题描述】:

我在 Google Apps 脚本中编写了一个 HTML(不是 UI)小工具,以嵌入到 Google 站点中。该小工具会显示一个下拉菜单,其中包含包含 URL/显示名称值/文本对的选项。

我想在小工具中放置一个按钮,该按钮会打开一个与所选 URL 对应的新窗口。但是,基本上,我在执行时收到“对象不包含‘打开’方法”错误

window.open(url);

有没有办法解决这个问题?我可以(并且已经)创建了带有成功打开其他窗口的锚标记的小工具,但似乎不允许从 javascript 执行相同的操作。

任何实现功能的东西都很好。基于 jQuery 的解决方案会很棒。

谢谢。

【问题讨论】:

    标签: javascript google-apps-script google-caja


    【解决方案1】:

    由于 Caja 的清理,所有的 javascript 函数都不受支持,所以无法在 App Script 中打开新窗口。

    在 App Script 中显示弹出窗口的解决方法是使用叠加窗口(技术上不是弹出窗口,但看起来像弹出窗口),如 App Script 中支持的 jQuery 模态对话框。

    http://jqueryui.com/dialog/#modal-form

    但是,应用脚本不支持 iframe 标签,因此尝试借助 iframe 标签在模态窗口中打开 url 将不起作用。

    您可以从下面的链接中阅读有关应用脚本中这些限制的更多信息:

    https://developers.google.com/apps-script/guides/html/restrictions**

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      您可以使用 HTMLService 在对话框中运行 window.open() JS 直接打开链接。

      Here's a demo sheet(复制看剧本)。

      openNewWindow() 被分配给按钮。

      代码.gs:

      function openNewWindow() {
      
        var htmlString = 
          '<div>' + 
            '<input type="button" value="Close" onclick="google.script.host.close()" />' + 
          '</div>' +
          '<script>window.open("http://www.google.com")</script>';
      
        var htmlOutput = HtmlService
          .createHtmlOutput(htmlString)
          .setSandboxMode(HtmlService.SandboxMode.IFRAME)
          .setHeight(60);
      
        SpreadsheetApp
          .getUi()
          .showModalDialog(htmlOutput, 'Opening New Window...');  
      }
      

      【讨论】:

        【解决方案3】:

        由于 caja 消毒,无法做到这一点。以下选项将不起作用。

        1) jquery - $("#some_link_id").click() 2) javascript - window.open、window.href 等...

        唯一的解决方法,但我想这不适合您的问题是使用 target="_blank" 创建链接以打开新窗口,但正如我所说,通过 javascript/jquery 无法单击这些链接。

        <a href="http://www.google.com" id="my_link" class="abc" target="_blank">My Link</a>
        

        【讨论】:

          【解决方案4】:

          我能够使用表单来实现这一点。提交时,将表单的操作设置为所需的 URL,由选择框中的所选项目确定。

              <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
              <script>
              $('document').ready(function(){
                 $('#yourForm').attr('onsubmit',null); //set onsubmit to Null for NATIVE Caja sandboxmode
          
                 $('#yourForm').submit(function(){
                    var val = $('#yourSelect').val();  //get value of select box
                    $('#yourForm').attr('action',val); //set action of form
                 });
              });
              </script>
              <div>
              <select id="yourSelect">
                 <option value="https://www.google.com">Google</option>
                 <option value="https://www.bing.com">Bing</option>
              </select>
          
              <form id="yourForm" method="get" target="_blank" action="">
              <input type="submit" value="Open Selected">
              </form>
          
              </div>
          

          【讨论】:

            猜你喜欢
            • 2010-11-05
            • 1970-01-01
            • 1970-01-01
            • 2021-02-11
            • 1970-01-01
            • 1970-01-01
            • 2012-05-31
            相关资源
            最近更新 更多