web-dev-qa-db-ja.com

URLを開くGoogle Apps Script

Google Appsスクリプトを記述する方法はありますか。実行すると、2つ目のブラウザウィンドウがwww.google.com(または選択した別のサイト)に開きますか?

ここで以前の質問の回避策を考えています: Google Appsスプレッドシートのメッセージボックス内にハイパーリンクを追加できます

21
PY_

このような仕事をする小さなUIを構築できます。

function test(){
showURL("http://www.google.com")
}
//
function showURL(href){
  var app = UiApp.createApplication().setHeight(50).setWidth(200);
  app.setTitle("Show URL");
  var link = app.createAnchor('open ', href).setId("link");
  app.add(link);  
  var doc = SpreadsheetApp.getActive();
  doc.show(app);
  }

URLを「表示」する場合は、次のようにこの行を変更します。

  var link = app.createAnchor(href, href).setId("link");

編集: デモスプレッドシートへのリンク in読み取り専用あまりにも多くの人が不要なものを書き続けているため(代わりに使用するコピーを作成してください)。

編集:UiAppは2014年12月11日にGoogleによって廃止されました。このメソッドはいつでも中断する可能性があり、代わりにHTMLサービスを使用するために更新が必要です!

編集:以下はHTMLサービスを使用した実装です。

function testNew(){
  showAnchor('Stackoverflow','http://stackoverflow.com/questions/tagged/google-apps-script');
}

function showAnchor(name,url) {
  var html = '<html><body><a href="'+url+'" target="blank" onclick="google.script.Host.close()">'+name+'</a></body></html>';
  var ui = HtmlService.createHtmlOutput(html)
  SpreadsheetApp.getUi().showModelessDialog(ui,"demo");
}
27
Serge insas

この関数はURLを開きます追加のユーザー操作を必要とせずに

/**
 * Open a URL in a new tab.
 */
function openUrl( url ){
  var html = HtmlService.createHtmlOutput('<html><script>'
  +'window.close = function(){window.setTimeout(function(){google.script.Host.close()},9)};'
  +'var a = document.createElement("a"); a.href="'+url+'"; a.target="_blank";'
  +'if(document.createEvent){'
  +'  var event=document.createEvent("MouseEvents");'
  +'  if(navigator.userAgent.toLowerCase().indexOf("firefox")>-1){window.document.body.append(a)}'                          
  +'  event.initEvent("click",true,true); a.dispatchEvent(event);'
  +'}else{ a.click() }'
  +'close();'
  +'</script>'
  // Offer URL as clickable link in case above code fails.
  +'<body style="Word-break:break-Word;font-family:sans-serif;">Failed to open automatically. <a href="'+url+'" target="_blank" onclick="window.close()">Click here to proceed</a>.</body>'
  +'<script>google.script.Host.setHeight(40);google.script.Host.setWidth(410)</script>'
  +'</html>')
  .setWidth( 90 ).setHeight( 1 );
  SpreadsheetApp.getUi().showModalDialog( html, "Opening ..." );
}

このメソッドは、一時的なダイアログボックスを作成することで機能するため、スクリプトエディターやカスタムGシート式など、UIサービスにアクセスできないコンテキストでは機能しません。

18

Google Apps Scriptは自動的にWebページを開きませんが、リンク、ユーザーがクリックして目的のWebページを開くボタン、または Windowオブジェクト を使用するメッセージを表示するために使用できます addEventListener() などのメソッドでURLを開きます。

UiAppは現在廃止されていることに注意してください。から Class UiApp-Google Apps Script-Google Developers

非推奨。 UIサービスは 2014年12月11日に非推奨 でした。ユーザーインターフェイスを作成するには、代わりに HTMLサービス を使用します。

HTML Serviceのリンクページの例は非常に単純ですが、

Code.gs

// Use this code for Google Docs, Forms, or new Sheets.
function onOpen() {
  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
      .createMenu('Dialog')
      .addItem('Open', 'openDialog')
      .addToUi();
}

function openDialog() {
  var html = HtmlService.createHtmlOutputFromFile('index')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
      .showModalDialog(html, 'Dialog title');
}

2つのハイパーリンクを表示するためのindex.htmlのカスタマイズバージョン

<a href='http://stackoverflow.com' target='_blank'>Stack Overflow</a>
<br/>
<a href='http://meta.stackoverflow.com/' target='_blank'>Meta Stack Overflow</a>
6
Rubén

window.open(url) - 1 ポップアップブロッカーが無効になっている場合、Webページを自動的に開きます(Stephenの answer の場合と同様)

openUrl.html

<!DOCTYPE html>
<html>
  <head>
   <base target="_blank">
    <script>
     var url1 ='https://stackoverflow.com/a/54675103';
     var winRef = window.open(url1);
     winRef ? google.script.Host.close() : window.alert('Allow popup to redirect you to '+url1) ;
     window.onload=function(){document.getElementById('url').href = url1;}
    </script>
  </head>
  <body>
    Kindly allow pop ups</br>
    Or <a id='url'>Click here </a>to continue!!!
  </body>
</html>

code.gs:

function modalUrl(){
  SpreadsheetApp.getUi()
   .showModalDialog(
     HtmlService.createHtmlOutputFromFile('openUrl').setHeight(50),
     'Opening StackOverflow'
   )
}    
2
TheMaster

以前の例から離れて、これを行うよりクリーンな方法があると思います。 index.htmlファイルをプロジェクトに追加し、上記のStephenのコードを使用して、HTMLドキュメントに変換します。

<!DOCTYPE html>
<html>
  <base target="_top">
  <script>
    function onSuccess(url) {
      var a = document.createElement("a"); 
      a.href = url;
      a.target = "_blank";
      window.close = function () {
        window.setTimeout(function() {
          google.script.Host.close();
        }, 9);
      };
      if (document.createEvent) {
        var event = document.createEvent("MouseEvents");
        if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1) {
          window.document.body.append(a);
        }                        
        event.initEvent("click", true, true); 
        a.dispatchEvent(event);
      } else {
        a.click();
      }
      close();
    }

    function onFailure(url) {
      var div = document.getElementById('failureContent');
      var link = '<a href="' + url + '" target="_blank">Process</a>';
      div.innerHtml = "Failure to open automatically: " + link;
    }

    google.script.run.withSuccessHandler(onSuccess).withFailureHandler(onFailure).getUrl();
  </script>
  <body>
    <div id="failureContent"></div>
  </body>
  <script>
    google.script.Host.setHeight(40);
    google.script.Host.setWidth(410);
  </script>
</html>

次に、Code.gsスクリプト、次のようなものを使用できます。

function getUrl() {
  return 'http://whatever.com';
}

function openUrl() {
  var html = HtmlService.createHtmlOutputFromFile("index");
  html.setWidth(90).setHeight(1);
  var ui = SpreadsheetApp.getUi().showModalDialog(html, "Opening ..." );
}
2
OaklandFanatic

これら2つの唯一の違い:

  • var link = app.createAnchor( 'open'、href).setId( "link");
  • var link = app.createAnchor(href、href).setId( "link");

最初のケースでは、リンクはダイアログボックスに「開く」と表示されます。これまでのところ、リンクを自動的に開く方法が見つかりませんでした...( https://developers.google.com/apps-script/class_anchor を参照)。

ドキュメントを自動的に開く唯一の他の方法は次のようです:

var doc = DocumentApp.openById(foundFile.getId());

しかし、その後、私はdocで何をすべきかわかりません!つまりdoc.show()はありません...

0
wgw