it-swarm.com.de

Google Apps Script zum Öffnen einer URL

Gibt es eine Möglichkeit, ein Google Apps-Skript zu schreiben, sodass beim Ausführen ein zweites Browserfenster für www.google.com (oder eine andere Website meiner Wahl) geöffnet wird?

Ich versuche hier, meine vorherige Frage zu umgehen: Kann ich einen Hyperlink in ein Nachrichtenfeld einer Google Apps-Tabelle einfügen?

21
PY_

Sie können eine kleine Benutzeroberfläche erstellen, die die Aufgabe wie folgt erfüllt:

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);
  }

Wenn Sie die URL anzeigen möchten, ändern Sie diese Zeile einfach wie folgt:

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

BEARBEITEN: Link zu einer Demo-Tabelle in schreibgeschützt , weil zu viele Leute immer wieder unerwünschte Dinge darauf schreiben (mache stattdessen eine Kopie).

BEARBEITEN: UiApp wurde am 11. Dezember 2014 von Google als veraltet eingestuft. Diese Methode kann jederzeit abbrechen und muss aktualisiert werden, um stattdessen den HTML-Dienst zu verwenden!

BEARBEITEN: unten ist eine Implementierung mit HTML-Dienst.

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

Diese Funktion öffnet eine URL ohne dass zusätzliche Benutzerinteraktion erforderlich ist.

/**
 * 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 ..." );
}

Diese Methode erstellt ein temporäres Dialogfeld, sodass sie nicht in Kontexten funktioniert, in denen auf den UI-Dienst nicht zugegriffen werden kann, z. B. im Skripteditor oder in einer benutzerdefinierten G-Sheets-Formel.

18

Google Apps Script öffnet Webseiten nicht automatisch, kann jedoch verwendet werden, um eine Nachricht mit Links oder Schaltflächen anzuzeigen, auf die der Benutzer klicken kann, um die gewünschten Webseiten zu öffnen, oder um sogar das Fensterobjekt zu verwenden und Methoden wie addEventListener () zum Öffnen von URLs.

Es ist erwähnenswert, dass UiApp jetzt veraltet ist. Von Klasse UiApp - Google Apps Script - Google Developers

Veraltet Der UI-Service war veraltet am 11. Dezember 2014 . Verwenden Sie zum Erstellen von Benutzeroberflächen stattdessen den HTML-Dienst .

Das Beispiel auf der verlinkten HTML-Service-Seite ist ziemlich einfach.

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');
}

Eine angepasste Version von index.html, um zwei Hyperlinks anzuzeigen

<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 öffnet Webseiten automatisch, vorausgesetzt, Popup-Blocker sind deaktiviert (wie bei Stephen's 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

Aufbauend auf einem früheren Beispiel, denke ich, gibt es eine sauberere Möglichkeit, dies zu tun. Erstelle ein index.html Datei in Ihrem Projekt und mit Stephens Code von oben, konvertieren Sie es einfach in ein HTML-Dokument.

<!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>

Dann in Ihrem Code.gs Skript können Sie so etwas wie das folgende haben,

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

Der einzige Unterschied zwischen diesen beiden:

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

ist, dass im ersten Fall der Link "offen" im Dialogfeld angezeigt wird. Bisher habe ich keine Möglichkeit gefunden, den Link automatisch zu öffnen ... (siehe https://developers.google.com/apps-script/class_anchor ).

Die einzige andere Möglichkeit, ein Dokument automatisch zu öffnen, ist:

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

aber dann bin ich mir nicht sicher, was mit doc gemacht werden soll! Das heißt es gibt kein doc.show () ...

0
wgw