Google Apps Script, чтобы открыть URL-адрес
Есть ли способ написать приложения Google script, поэтому при запуске открывается второе окно браузера на www.google.com(или другой сайт по моему выбору)?
Я пытаюсь найти работу по моему предыдущему вопросу:
Можно ли добавить гиперссылку в окно сообщения в электронной таблице Google Apps
Ответы
Ответ 1
Вы можете создать небольшой пользовательский интерфейс, который выполняет эту работу следующим образом:
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");
РЕДАКТИРОВАТЬ: ссылка на демонстрационную таблицу только для чтения, потому что слишком много людей продолжают писать на ней нежелательные вещи (просто сделайте копию, чтобы использовать ее).
РЕДАКТИРОВАТЬ: UiApp был объявлен устаревшим Google 11 декабря 2014 года, этот метод может сломаться в любое время и требует обновления для использования службы 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");
}
Ответ 2
Эта функция открывает 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 Sheets.
Ответ 3
Google Apps Script не будет автоматически открывать веб-страницы, но его можно использовать для отображения сообщения со ссылками, кнопками, по которым пользователь может щелкнуть по ним, чтобы открыть нужные веб-страницы, или даже использовать объект Window и методы, такие как addEventListener(), для открыть URL.
Стоит отметить, что UiApp сейчас устарела. Из класса UiApp - Google Apps Script - Разработчики Google
Устаревшее. Служба пользовательского интерфейса устарела 11 декабря 2014 года. Для создания пользовательских интерфейсов используйте вместо этого службу HTML.
Пример на связанной странице службы HTML довольно прост,
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');
}
Настроенная версия 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>
Ответ 4
Основываясь на более раннем примере, я думаю, что есть более чистый способ сделать это. Создайте файл index.html
в своем проекте и, используя приведенный выше код Стивена, просто преобразуйте его в документ 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 ..." );
}
Ответ 5
window.open(url)
1 автоматически открывает веб-страницы при условии, что блокировщики pop- отключены (как в случае с ответом Стивена)
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'
)
}
Ответ 6
Единственное различие между этими двумя:
- var link = app.createAnchor('open', href).setId( "link" );
- var link = app.createAnchor(href, href).setId( "link" );
заключается в том, что в первом случае ссылка отобразит "open" в диалоговом окне. До сих пор я не нашел возможности автоматически открывать ссылку... (см. https://developers.google.com/apps-script/class_anchor).
Другим способом открытия документа автоматически является:
var doc = DocumentApp.openById(foundFile.getId());
но тогда я не уверен, что делать с документом! То есть нет doc.show()...