2016-09-08 4 views
0

おそらく私が下に出てきたものよりはるかに優れた解決策がありますが、GoogleのアプリケーションスクリプトからGoogle Web内のjavascriptに変数を渡そうとしたApp。 Webページ内のスクリプトレットは、多数のスクリプト呼び出しを行います。また、スクリプト呼び出しが同期しているため、ページが15秒間読み込まれないように見えます。 Javascriptはこの問題を解決しました。JavaScriptを使用しているときにGoogle Webアプリケーションがhttpリンクを開けない

function doGet(e) { 
    //check to see what the user is hoping to do 
    var upTo = e.parameter.upTo; 
    var userAgentResponse = HtmlService.getUserAgent(); 
    //check where we are up to, URL will need ?upTo=profile added to it. 
    if (upTo == "profile"){ 
    //get name from URL will need ?upTo=profile&firstName=placeholder&surname=placeholder 
    var firstName = e.parameter.firstName; 
    var surname = e.parameter.surname; 
    var fullName = firstName + " " + surname; 
    if (userAgentResponse.indexOf("iPhone")>-1) { //check to see if it is an iPhone and then use the specific iPhone profile page becaause of viewport issues 
     //var t = HtmlService.createTemplateFromFile('iphoneProfilePage'); 
     var code = HtmlService.createHtmlOutputFromFile('iphoneProfilePage').getContent(); 
    }//end if Iphone 
    else { 
     //var t = HtmlService.createTemplateFromFile('profilePage'); 
     var code = HtmlService.createHtmlOutputFromFile('profilePage').getContent(); 
    }//end else 
    //t.data = [firstName, surname, userAgentResponse]; 
    //return t.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setTitle("Response Services Inc.").addMetaTag('viewport', 'width=device-width, initial-scale=1.0'); 
    var newCode = code.replace("<script id=\"firstLoad\">", "<script id=\"firstLoad\">\n var firstName = \"" + firstName + "\";\n var surname = \"" + surname + "\";\n" + 
         "var fullName = \"" + fullName + "\";\n"); 
    var html = HtmlService.createHtmlOutput(newCode).asTemplate(); 
    return html.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setTitle("Response Services Inc.").addMetaTag('viewport', 'width=device-width, initial-scale=1'); 
    } 
} 

私が襲った次の悩みは私と私が話したことをうんざりさせました。下のHTMLには、いくつかのhttpリンクといくつかのhttpsリンクがあります。上記のdoGet()を使用すると、httpリンクがhttpsプロトコルに反して実行され、新しいページは開かないようですが、createHtmlOutput()の代わりにコメントアウトされたコード(createTemplateFromFile())を使用すると表示されます。 asTemplate())httpリンクはうまく動作します。また、新しいウィンドウでリンクを開いていると、ページが正常に開きます。新しいウィンドウは、ユーザーが前後にナビゲートする必要があるため、良い解決策ではありません。

<nav> 
    <label for="drop" class="toggle">Menu</label> 
    <input type="checkbox" id="drop" /> 
    <ul class="menu"> 
    <li><a href="http://rsi-intranet.org" target="_blank">Home</a></li> 
    <li><a href="https://script.google.com/a/macros/responseservices.org/s/AKfycbyz6TzObVUrWo0fiXHH0vU9DNO3511w1tVWrdVEUVsrjo_ejVHS/exec?upTo=SUList&letter=0">Service Users</a></li> 
    <li><a href="https://script.google.com/a/macros/responseservices.org/s/AKfycbyyVpvvDivBcwktFmHw-DrxWOTKUT17Ir2jdG2Oi4c/exec?upTo=progDays">Activities & Supports</a></li> 
    <li><a href="http://www.rsi-intranet.org/policies-and-procedures" target="_blank">Policies and Procedures</a></li> 
    <li><a href="http://www.rsi-intranet.org/quick-forms" target="_blank">Quick Forms</a></li> 
    <li><a href="http://www.rsi-intranet.org/help-and-learning" target="_blank">Help & Learning</a></li> 
    </ul> 
</nav> 

Google Appsのドキュメントを検索しましたが、理由はまだありません。答えを知りたいですか?

答えて

1

WebアプリケーションがIFRAME内で提供されるため、ハイパーリンクにはtarget = "_ blank"を使用する必要があります。一部のWebサイトでは、X-Frame-OptionsヘッダーをDENYに設定することで、IFRAME内のリンクを拒否することがあります。

関連する問題