0

我在谷歌网站上有几个页面,每个页面都有一些小工具。现在我制作了一个脚本来编辑这些页面内容,但我遇到了内部服务器错误问题。

要重现问题:

  1. 在谷歌网站中创建一个页面。
  2. 添加一些小工具,例如子页面列表。
  3. 尝试执行此脚本:

    function doGet() {
     var site = SitesApp.getSiteByUrl("Your site URL");
     var page = site.getChildByName("testeiframe");
     Logger.log(page.getHtmlContent());
     page.setHtmlContent(page.getHtmlContent());
    }
    

你会得到服务错误:SitesApp: Internal Error (line 4, file "Code")

日志输出(一些 HTML 是由添加的小工具生成的):

[13-05-08 14:56:14:532 BRT] <table class='sites-layout-name-one-column sites-layout-    hbox' cellspacing='0'><tbody><tr><td class='sites-layout-tile sites-tile-name-content-1'>    <div dir='ltr'><table width='100%'>
<tbody>
<tr>
<td width='80%'>
<div><br/>
</div>
<br/>
</td>
<td width='20%'>
<div class='sites-embed-align-left-wrapping-off'><div style='width:100%;' class='sites-    embed-border-off sites-embed sites-embed-full-width'><div class='sites-embed-content sites-    embed-type-maestro'><iframe id='maestro_frame_1365991698' scrolling='no' frameborder='0'     height='200' width='100%' title='Apps Script Gadget'     src='https://sites.google.com/macros/s/AKfycbwzCf4E-Sh22-IEuo2IDDsQImGCQrWzixBGjWmejA/exec?    mid=ACjPJvEwYP7HUKKoqhvc1HAZh7uLQMQY6F31evULDnTKsS-dpoXuw599A_y-    WPzYCnA4CY6Kg2iPA83GUn5gIt9GEi9jzed6nEotMcU&amp;bc=transparent&amp;f=arial,sans-    serif&amp;tc=%23404041&amp;lc=%23336699'/></div></div></div><img style='display:block;text-    align:left;margin-right:auto;' height='300' width='500' data-    props='align:left;displayAs:TOC;maxDepth:6;' data-type='subpages'     src='http://www.google.com/chart?    chc=sites&amp;cht=d&amp;chdp=sites&amp;chl=%5B%5BPage+listing&apos;%3D20&apos;f%5Cv&apos;a%    5C%3D0&apos;10&apos;%3D499&apos;0&apos;dim&apos;%5Cbox1&apos;b%5CF6F6F6&apos;fC%5CF6F6F6&ap    os;eC%5C0&apos;sk&apos;%5C%5B&apos;%5D&apos;a%5CV%5C%3D12&apos;f%5C%5DV%5Cta%5C%3D10&apos;%    3D0&apos;%3D500&apos;%3D297&apos;dim&apos;%5C%3D10&apos;%3D10&apos;%3D500&apos;%3D297&apos;    vdim&apos;%5Cbox1&apos;b%5Cva%5CF6F6F6&apos;fC%5CC8C8C8&apos;eC%5C&apos;a%5C%5Do%5CLauto&ap    os;f%5C&amp;sig=x5z8H4DplZUYp7X4J5EY798sKFM'/><div class='sites-embed-align-left-    wrapping-off'><div style='width:100%;' class='sites-embed-border-off sites-embed sites-    embed-full-width'><div style='display:none;' class='sites-embed-object-title'>TRT4</div>    <div class='sites-embed-content sites-embed-type-calendar'><iframe scrolling='no'     frameborder='0' height='250' width='100%' title='TRT4'     src='http://www.google.com/calendar/embed?    src=gtbq7elsfvo6j9t42dd139c48k@group.calendar.google.com&amp;color=%23668CD9&amp;ctz=Etc/GM    T%2B3&amp;showTitle=0&amp;showNav=0&amp;showDate=0&amp;showTabs=0&amp;showCalendars=0&amp;h    l=en' id='1774561823'/></div></div></div>
</td>
</tr>
</tbody>
</table></div></td></tr></tbody></table>
4

1 回答 1

1

简短回答:使用编辑器重建您的页面。

我尝试使用您在问题中提供的文本创建网站页面,并得到了您报告的错误。Sites 不喜欢其中的某些内容 - 我相信这是您的 iframe 标记中的属性。(我注意到你没有</iframe>标签,顺便说一句。)

我已经能够使用站点编辑器复制该页面,src仅从您发布的信息中获取信息,并且结果能够通过您的脚本而没有任何错误。

第一个小工具

在您最初的问题中,第一个小工具是 Apps-Script Gadget(基于title源代码)。从一个空白页面开始testeiframe,我插入了小工具,并将这个值粘贴为您的已发布为服务的 Apps 脚本的 URL

https://sites.google.com/macros/s/AKfycbwzCf4E-Sh22-IEuo2IDDsQImGCQrWzixBGjWmejA/exec?mid=ACjPJvEwYP7HUKKoqhvc1HAZh7uLQMQY6F31evULDnTKsS-dpoXuw599A_y-WPzYCnA4CY6Kg2iPA83GUn5gIt9GEi9jzed6nEotMcU&amp;bc=transparent&amp;f=arial,sans-serif&amp;tc=%23404041&amp;lc=%23336699

如前所述,这将排除所有有问题的 iframe 标记。

替代方案- 我还可以使用 html 编辑器将 iframe 直接插入页面,然后粘贴标签<iframe src=...></iframe>。您可以按照此视频中的说明学习如何操作。

第二个小工具

您的另一个小工具是日历。src我只是使用了您提供的日历。

生成的 HTML

使用您的脚本,这是 Logger 的内容,通过prettyprinter传递:

<table class='sites-layout-name-one-column sites-layout-hbox' cellspacing='0'>
<tbody>
  <tr>
    <td class='sites-layout-tile sites-tile-name-content-1'>
      <div dir='ltr'>
        <img class='igm' style='display:block;text-align:left;margin-right:auto;'
        height='800' width='500' data-props=
        'height:800;igsrc:http#58//0.gmodules.com/ig/ifr?mid=0&amp;synd=trogedit&amp;url=http%3A%2F%2Fwww.gstatic.com%2Fsites-gadgets%2Fiframe%2Fiframe.xml&amp;up_iframeURL=https%3A%2F%2Fsites.google.com%2Fmacros%2Fs%2FAKfycbwzCf4E-Sh22-IEuo2IDDsQImGCQrWzixBGjWmejA%2Fexec%3Fmid%3DACjPJvGiKo17cYG9syr9gGYY44PEyWdKDJPD4xkYErDWyxsn_6TjyOplXYq0ZCu405D-IKLl41lZVMC648mjzJUxC7EEKTgx7_F8gEE_ZsjP9cFo%26bc%3Dtransparent%26f%3DArial%2C%2BVerdana%2C%2Bsans-serif%26tc%3D%2523444444%26lc%3D%25230033cc&amp;up_scroll=no&amp;w=100%&amp;h=800;mid:0;spec:http#58//www.gstatic.com/sites-gadgets/iframe/iframe.xml;up_iframeURL:https#58//sites.google.com/macros/s/AKfycbwzCf4E-Sh22-IEuo2IDDsQImGCQrWzixBGjWmejA/exec?mid=ACjPJvGiKo17cYG9syr9gGYY44PEyWdKDJPD4xkYErDWyxsn_6TjyOplXYq0ZCu405D-IKLl41lZVMC648mjzJUxC7EEKTgx7_F8gEE_ZsjP9cFo&amp;bc=transparent&amp;f=Arial,+Verdana,+sans-serif&amp;tc=%23444444&amp;lc=%230033cc;up_scroll:no;width:100%;'
        data-type='ggs-gadget' data-igsrc=
        'http://0.gmodules.com/ig/ifr?mid=0&amp;synd=trogedit&amp;url=http%3A%2F%2Fwww.gstatic.com%2Fsites-gadgets%2Fiframe%2Fiframe.xml&amp;up_iframeURL=https%3A%2F%2Fsites.google.com%2Fmacros%2Fs%2FAKfycbwzCf4E-Sh22-IEuo2IDDsQImGCQrWzixBGjWmejA%2Fexec%3Fmid%3DACjPJvGiKo17cYG9syr9gGYY44PEyWdKDJPD4xkYErDWyxsn_6TjyOplXYq0ZCu405D-IKLl41lZVMC648mjzJUxC7EEKTgx7_F8gEE_ZsjP9cFo%26bc%3Dtransparent%26f%3DArial%2C%2BVerdana%2C%2Bsans-serif%26tc%3D%2523444444%26lc%3D%25230033cc&amp;up_scroll=no&amp;w=100%&amp;h=800'
        src=
        'http://www.google.com/chart?chc=sites&amp;cht=d&amp;chdp=sites&amp;chl=%5B%5BGoogle+Gadget&#39;%3D20&#39;f%5Cv&#39;a%5C%3D0&#39;10&#39;%3D499&#39;0&#39;dim&#39;%5Cbox1&#39;b%5CF6F6F6&#39;fC%5CF6F6F6&#39;eC%5C0&#39;sk&#39;%5C%5B%22Include+gadget+(iframe)%22&#39;%5D&#39;a%5CV%5C%3D12&#39;f%5C%5DV%5Cta%5C%3D10&#39;%3D0&#39;%3D500&#39;%3D797&#39;dim&#39;%5C%3D10&#39;%3D10&#39;%3D500&#39;%3D797&#39;vdim&#39;%5Cbox1&#39;b%5Cva%5CF6F6F6&#39;fC%5CC8C8C8&#39;eC%5C&#39;a%5C%5Do%5CLauto&#39;f%5C&amp;sig=LIupg-AjxUbah_DqtRj3JecPeDg' />

        <div class='sites-embed-align-left-wrapping-off'>
          <div style='width:100%;' class=
          'sites-embed-border-off sites-embed sites-embed-full-width'>
            <div style='display:none;' class='sites-embed-object-title'>
              Google Calendar
            </div>

            <div class='sites-embed-content sites-embed-type-calendar'>
              <iframe scrolling='no' frameborder='0' height='250' width='100%' title=
              'Google Calendar' src=
              'http://www.google.com/calendar/embed?src=gtbq7elsfvo6j9t42dd139c48k@group.calendar.google.com&amp;color=%23668CD9&amp;ctz=Etc/GMT%252B3&amp;showTitle=1&amp;showNav=0&amp;showDate=0&amp;showTabs=0&amp;showCalendars=0&amp;hl=en'
              id='155565547' name="155565547"></iframe>
            </div>
          </div>
        </div>
      </div>
    </td>
  </tr>
</tbody>
</table>

正如您所指出的,这些小工具是大部分代码的来源。我觉得奇怪的是,在我的案例中,部分代码显然是通过了encodeURIComponent(),而你的似乎没有。(也许这指向实际问题?)

于 2013-05-08T05:50:23.147 回答