Google Apps Script zum Öffnen einer URL

Lesezeit: 9 Minuten

Google Apps Script zum Offnen einer URL
PY_

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

Ich versuche, hier eine Problemumgehung für meine vorherige Frage zu finden: Kann ich einen Hyperlink in ein Nachrichtenfeld einer Google Apps-Tabelle einfügen

Google Apps Script zum Offnen einer URL
Stephen M. Harris

Diese Funktion öffnet eine URL ohne dass eine 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 funktioniert durch Erstellen eines temporären Dialogfelds, sodass sie nicht in Kontexten funktioniert, in denen auf den UI-Dienst nicht zugegriffen werden kann, wie z. B. der Skripteditor oder eine benutzerdefinierte G Sheets-Formel.

  • @MaxMakhrov tut es tatsächlich! Ich habe gerade den Code mit einem Fix aktualisiert. Es scheint, dass programmgesteuerte Klicks in Firefox lange Zeit problematisch waren, aber jetzt zeigt das Skript zuverlässig den „Failed to open“-Fallback in Firefox an und bietet dem Benutzer einen funktionierenden Link.

    – Stephen M. Harris

    2. März 2018 um 5:50 Uhr

  • Stephen, ich folge nicht dem obigen Skript. Wenn ich es ausführe, geht es zu einer Fehlerseite, die besagt, dass die URL nicht gefunden wurde. Können Sie ein Beispiel für einen Code posten, der eine Website wie google.com öffnet?

    – PY_

    15. Februar 2019 um 13:49 Uhr

  • @PY_ Sie können jede beliebige URL an die Funktion übergeben. Um google.com zu öffnen, fügen Sie das obige Skript ein und rufen Sie dann auf openUrl( 'https://google.com' );

    – Stephen M. Harris

    17. Februar 2019 um 8:48 Uhr

  • @StephenM.Harris – Wenn Sie DocumentApp durch SpreadsheetApp ersetzen, werden zwei neue Fenster geöffnet (gleiche URL). Irgendwelche Vorschläge, wie man es beheben kann? Ich versuche, die Bereiche in meinem Google Doc-Addon einzuschränken.

    – Jed Grant

    24. Dezember 2019 um 21:46 Uhr

  • @PY_, ich hatte das gleiche Problem, Sie müssen es einschließen http:// am Anfang von URLs, dann funktioniert es

    – Todmo

    6. Januar 2020 um 16:14 Uhr

1646308928 74 Google Apps Script zum Offnen einer URL
Serge Insas

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

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 ständig unerwünschte Dinge darauf schreiben (machen Sie stattdessen einfach eine Kopie, um sie zu verwenden).

BEARBEITEN: UiApp wurde von Google am 11. Dezember 2014 eingestellt, diese Methode kann jederzeit brechen und muss aktualisiert werden, um stattdessen den HTML-Dienst zu verwenden!

BEARBEITEN: Unten ist eine Implementierung mit dem 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");
}

  • siehe Bearbeiten, ich habe eine Beispieltabelle hinzugefügt, um Ihnen zu zeigen, wie sie verwendet werden sollte.

    – Serge insas

    3. August 2012 um 23:09 Uhr

  • Sorry für die langsame Antwort. Die Beispieltabelle befindet sich im Nur-Ansicht-Modus, sodass ich nicht zum Skript-Editor gelangen kann. Aber aus irgendeinem Grund funktioniert jetzt das obige Skript. Danke für die Hilfe!

    – PY_

    3. Januar 2013 um 12:51 Uhr


  • Info: siehe auch diesen anderen Beitrag: stackoverflow.com/questions/18151564/…

    – Serge insas

    20. August 2013 um 8:31 Uhr

  • Für diejenigen unter Ihnen, die dies im Jahr 2018 oder später überprüft haben, funktioniert die obige Lösung nicht mehr. Bitte sehen Sie sich die Antwort von Stephen M. Harris an. Funktioniert zum Zeitpunkt des Schreibens dieses Kommentars.

    – Steve Gon

    27. August 2018 um 20:42 Uhr

  • sorry aber das stimmt nicht, die neue Version funktioniert als EDIT, sie nutzt HTMLService.

    – Serge insas

    27. August 2018 um 20:52 Uhr

1646308928 137 Google Apps Script zum Offnen einer URL
Der Meister

Es besteht wirklich keine Notwendigkeit, ein benutzerdefiniertes Klickereignis zu erstellen, wie in der prämiierten Antwort vorgeschlagen, oder die URL anzuzeigen, wie in der akzeptierten Antwort vorgeschlagen.

window.open(url)1 öffnet Webseiten automatisch ohne Benutzerinteraktion, vorausgesetzt, Popup-Blocker sind deaktiviert (wie im Fall von Stephens Antwort)

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

Google Apps Script zum Offnen einer URL
Rubén

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

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

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

Das Beispiel auf der verlinkten Seite des HTML-Dienstes 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>

Aufbauend auf einem früheren Beispiel, denke ich, dass es einen saubereren Weg gibt, dies zu tun. Erstelle ein index.html Datei in Ihrem Projekt und verwenden Sie Stephens Code von oben, konvertieren Sie sie 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="'%20+%20url%20+%20'" 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 ..." );
}

  • Ich habe dieses Beispiel ausprobiert. Vor ein paar Tagen hat es noch einwandfrei funktioniert. Wenn ich es heute ausführe, öffnet es nur den Dialog, aber nicht die externe URL in einem neuen Tab. Gibt es eine Einstellung, die in meinem Browser schief gelaufen ist?

    – Shanti

    11. Dezember 2020 um 12:12 Uhr

  • @shanti Hast du das jemals herausgefunden? Es scheint, dass etwas Ähnliches bei mir plötzlich nicht mehr funktioniert: stackoverflow.com/questions/10744760/…

    – Ryan

    27. August 2021 um 13:51 Uhr

  • @Ryan Ja, es hatte etwas mit meinen Chrome-Einstellungen oder einer Chrome-Erweiterung zu tun. Ich musste die Chrome-Einstellungen auf ihre ursprünglichen Standardwerte zurücksetzen und es hat funktioniert. Ich hatte auch in diesem Link eine Antwort gesetzt: stackoverflow.com/questions/65265727/…

    – Shanti

    2. September 2021 um 15:38 Uhr

  • @shanti Danke. Ich habe auch eine Lösung gefunden, die ich in meinem Kommentar dort erwähnt habe.

    – Ryan

    2. September 2021 um 18:20 Uhr

1646308929 790 Google Apps Script zum Offnen einer URL
Ryan

Ich mochte die Antwort von @Stephen M. Harris und sie hat bis vor kurzem für mich funktioniert. Ich bin mir nicht sicher, warum es nicht mehr funktioniert.

Was funktioniert jetzt bei mir am 01.09.2021:

function openUrl( url ){
  Logger.log('openUrl. url: ' + url);
  const html = `<html>
<a id='url' href="${url}">Click here</a>
  <script>
     var winRef = window.open("${url}");
     winRef ? google.script.host.close() : window.alert('Configure browser to allow popup to redirect you to ${url}') ;
     </script>
</html>`; 
  Logger.log('openUrl. html: ' + html);
  var htmlOutput = HtmlService.createHtmlOutput(html).setWidth( 250 ).setHeight( 300 );
  Logger.log('openUrl. htmlOutput: ' + htmlOutput);
  SpreadsheetApp.getUi().showModalDialog( htmlOutput, `openUrl function in generic.gs is now opening a URL...` ); // https://developers.google.com/apps-script/reference/base/ui#showModalDialog(Object,String)  Requires authorization with this scope: https://www.googleapis.com/auth/script.container.ui  See https://developers.google.com/apps-script/concepts/scopes#setting_explicit_scopes
}

https://developers.google.com/apps-script/reference/base/ui#showModalDialog(Object,String) Erfordert eine Autorisierung mit diesem Bereich: https://www.googleapis.com/auth/script.container.ui Sehen https://developers.google.com/apps-script/concepts/scopes#setting_explicit_scopes

  • Ich habe dieses Beispiel ausprobiert. Vor ein paar Tagen hat es noch einwandfrei funktioniert. Wenn ich es heute ausführe, öffnet es nur den Dialog, aber nicht die externe URL in einem neuen Tab. Gibt es eine Einstellung, die in meinem Browser schief gelaufen ist?

    – Shanti

    11. Dezember 2020 um 12:12 Uhr

  • @shanti Hast du das jemals herausgefunden? Es scheint, dass etwas Ähnliches bei mir plötzlich nicht mehr funktioniert: stackoverflow.com/questions/10744760/…

    – Ryan

    27. August 2021 um 13:51 Uhr

  • @Ryan Ja, es hatte etwas mit meinen Chrome-Einstellungen oder einer Chrome-Erweiterung zu tun. Ich musste die Chrome-Einstellungen auf ihre ursprünglichen Standardwerte zurücksetzen und es hat funktioniert. Ich hatte auch in diesem Link eine Antwort gesetzt: stackoverflow.com/questions/65265727/…

    – Shanti

    2. September 2021 um 15:38 Uhr

  • @shanti Danke. Ich habe auch eine Lösung gefunden, die ich in meinem Kommentar dort erwähnt habe.

    – Ryan

    2. September 2021 um 18:20 Uhr

923160cookie-checkGoogle Apps Script zum Öffnen einer URL

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy