0

是否可以檢索Google Doc的內容並將其顯示在html頁面的div中?如果是這樣,在下面的精簡示例中實現「MAGIC」的正確方法是什麼?在html頁面中獲取並顯示Google Doc正文

<html> 
    <head> 
    </head> 
    <body> 
     <div> 
      <MAGIC> 
      Script or link that retrieves and displays the body of a Google Doc. 
      </MAGIC> 
     </div> 
    </body> 
</html> 

在上面,你可以假設

  1. 的HTML是由谷歌託管驅動器供應。
  2. 對Google文檔的引用是靜態的。
  3. 無需在公共html頁面中編輯Doc(即在該上下文中爲只讀)。

我已經通讀了Apps Script文檔,看起來好像某些文檔服務和內容服務的組合可能是可行的。例如,Document Service具有getBody()和copy()方法,但不清楚這些調用返回的對象是否可以呈現所見即所得(WYSIWYG)作爲html插入到html容器中。

背景:我正在嘗試爲小型非營利組織實施安全,易用的CMS。我已經在Google雲端硬盤上創建了一個託管爲 的網站框架。到目前爲止,它看起來很有前途,但是變化需要能夠編輯html。我們有許多人可以在類似文字處理器的環境中創建內容,但只有我自己可以處理HTML/CSS/JQuery/AppsScript的我自己 。

如果我可以專注於整體框架並讓其他人更新事件等的內容,這將是一個巨大的勝利。基本上,如果他們能夠編輯Google文檔,然後手動重新加載網頁以查看結果,我會非常高興。

我意識到CMS有很多方法,但現在我有興趣探索純粹的Google Docs/Google Drive解決方案。

回答

1

你可以得到一個谷歌文檔與使用的URLFetch驅動API調用的原始HTML內容,這裏是如何工作的

 var id = 'Doc-Very-Long-ID-Here'; 
     var url = 'https://docs.google.com/feeds/'; 
     var doc = UrlFetchApp.fetch(url+'download/documents/Export?exportFormat=html&format=html&id='+id, 
            googleOAuth_('docs',url)).getContentText(); 

    // the variable doc is the HTML content that you can use 

    function googleOAuth_(name,scope) { 
     var oAuthConfig = UrlFetchApp.addOAuthService(name); 
     oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope); 
     oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken"); 
     oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken"); 
     oAuthConfig.setConsumerKey('anonymous'); 
     oAuthConfig.setConsumerSecret('anonymous'); 
     return {oAuthServiceName:name, oAuthUseToken:"always"}; 
    } 

還有羅曼Vialard available here庫是稱爲DocsListExtended並提供了一大堆漂亮的擴展。


編輯:按照你編輯:

不能與完整的代碼中使用它就像這樣,呈現在web應用程序的HTML內容使用html service,下面的例子和working example

function doGet() { 

    var id = '1el3DpTp1sukDjzlKXh8plf0Zj-qm0drI7KbytroVrNU'; 
    var url = 'https://docs.google.com/feeds/'; 
    var doc = UrlFetchApp.fetch(url+'download/documents/Export?exportFormat=html&format=html&id='+id, googleOAuth_('docs',url)).getContentText(); 
    return HtmlService.createHtmlOutput(doc); 
} 

// the variable doc is the HTML content that you can use 

function googleOAuth_(name,scope) { 
    var oAuthConfig = UrlFetchApp.addOAuthService(name); 
    oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope); 
    oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken"); 
    oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken"); 
    oAuthConfig.setConsumerKey('anonymous'); 
    oAuthConfig.setConsumerSecret('anonymous'); 
    return {oAuthServiceName:name, oAuthUseToken:"always"}; 
} 
+0

謝謝,Serge。它看起來很明智,但我無法使其工作。請參閱上文,我已經使用您的解決方案編輯了我的帖子,因爲我在App Script中實施了該帖子。我得到了404.包含文檔ID,以便您可以驗證它。它只是一個包含句子「這是CMS系統的測試」的文檔。 –

+0

固定的id字符串只包含id。沒有更多的404,但現在得到「腳本完成,但返回值不是支持的返回類型。」 –

+0

請參閱編輯。 –

2

我已經解決了發佈內容文檔和包括th e iframe嵌入了Google提供的代碼,用於實現我原來的問題「魔法」,例如,g

<iframe class="cmsframe" src="https://docs.google.com/document/d/1rhkuAB3IIu5Hq0tEtA4E_Qy_-sJMMnb33WBMlAEqlJU/pub?embedded=true"></iframe> 

class tag是手動添加的,所以我可以用CSS控制iframe的大小。

相關問題