2012-05-24 21 views

Antwort

21

Sie können eine kleine UI bauen, die den Job wie dies tut:

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 möchten, die uRL zu 'Show', ändern Sie einfach diese Zeile wie folgt aus:

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

EDIT: link to a demo spreadsheet in Lese nur weil zu viele Leute schreiben unerwünschte Dinge auf ... machen Sie eine Kopie zu verwenden.

BEARBEITEN: !! UiApp wurde am 11. Dezember 2014 von Google abgeschrieben. Diese Methode kann jederzeit unterbrochen werden und muss aktualisiert werden, um stattdessen den HTML-Service zu verwenden. !!

EDIT: unten ist eine Implementierung mit HTML-Service.

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"); 
} 
+1

Ich habe Ihre Funktion zu meiner Tabelle hinzugefügt, ausgeführt, und es hat nichts getan. Oben in der Tabelle wird "Skript-Test wird ausgeführt" angezeigt, gefolgt von "Skript-Test beendet". Es ist jedoch nichts passiert. Ich habe versucht, diese eine Zeile durch die zusätzliche Zeile zu ersetzen, die Sie angegeben haben, aber es war das gleiche Ergebnis. –

+0

Die Benutzeroberfläche wird im Tabellenfenster angezeigt. Können Sie feststellen, welchen Browser Sie verwenden oder ob Sie bereits andere Beispiele für Benutzeroberflächen in Tabellen verwendet haben? –

+0

Ich habe versucht, Chrome und IE8 –

0

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 "Öffnen" im Dialogfeld anzeigen wird. Bisher habe ich keine Möglichkeit gefunden den Link automatisch zu öffnen ... (siehe https://developers.google.com/apps-script/class_anchor).

Der einzige andere Weg ein Dokument zu öffnen, scheint automatisch zu sein:

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

aber dann bin ich mir nicht sicher, was mit Doc getan werden sollte! I.e. Es gibt keine doc.show() ...

3

Google Apps Script öffnet keine Webseiten automatisch, aber es kann verwendet werden, um eine Nachricht mit Links oder Schaltflächen anzuzeigen, auf die der Benutzer klicken kann, um das gewünschte Web zu öffnen Seiten.

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

Veraltet. Der UI-Dienst war deprecated on December 11, 2014. Um Benutzeroberflächen zu erstellen, verwenden Sie stattdessen die HTML service.

Das Beispiel im HTML-Dienst verlinkte 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'); 
} 

// Use this code for the older version of Sheets. 
function onOpen() { 
    var menu = [{name: 'Open', functionName: 'openDialog'}]; 
    SpreadsheetApp.getActive().addMenu('Dialog', menu); 
} 

function openDialog() { 
    var html = HtmlService.createHtmlOutputFromFile('index') 
     .setSandboxMode(HtmlService.SandboxMode.IFRAME); 
    SpreadsheetApp.getActive().show(html); 
} 

Eine angepasste Version des Index.html zeigen zwei Hyperlinks

<a href='http://stackoverflow.com' target='_blank'>Stack Overflow</a> 
<br/> 
<a href='http://meta.stackoverflow.com/' target='_blank'>Meta Stack Overflow</a> 
3

Diese Funktion öffnet eine URL ohne zusätzliche Interaktion mit dem Benutzer.

/** 
* 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 ein temporäres Dialogfeld zu schaffen, damit es nicht in Kontexten arbeitet, wo der UI-Dienst nicht zugänglich, wie Script-Editor oder eine benutzerdefinierten G Sheets Formel.

+0

Vielen Dank für der Hack. Ich habe es ohne Glück getestet :(Ich benutzte ein benutzerdefiniertes Menü und testete das Skript in Mozilla. Und das Skript öffnete einen neuen Tab mit dieser URL: 'über: blank'. –

+1

@MaxMakhrov in der Tat tut es! Ich habe nur aktualisiert Code mit einem Fix. Es scheint, dass programmatische Klicks in Firefox schon lange problematisch waren, aber jetzt zeigt das Skript zuverlässig das "Not Öffnen" -Fallback in Firefox an und bietet dem Benutzer einen funktionierenden Link. –

Verwandte Themen