Часто возникает задача, в которой требуется по результатам работы скрипта открыть ссылку в новом окне/вкладке браузера.
В Google Apps Script не существует методов взаимодействия с браузером. Единственная более-менее реальная связь между пользователем и сервером скрипта находится в интерфейсе реализуемой программы. Это может быть Таблица, Документ или Web приложение. Все они реализуются через HtmlService. Например,
Понятно, что в построенном
Идея обернутая кодом ниже по тексту.
Пользователь выбирает ячейку в Таблице (или все, что угодно, что формирует ссылку). На сервере
На клиенте строится окно диалога, открывается новая вкладка браузера и закрывается окно диалога, при успешном выполнении условия. Иначе появляется сообщение, что переданный параметр не ссылка.
Этот метод имеет существенный недостаток. Современные браузеры запрещают открытие новых вкладок и окон без разрешения пользователя. Поэтому придется добавить правило в ваш браузер. Для Google Chrome перейдите по адресу chrome://settings/content/popups и добавьте в список разрешенных правило
В Google Apps Script не существует методов взаимодействия с браузером. Единственная более-менее реальная связь между пользователем и сервером скрипта находится в интерфейсе реализуемой программы. Это может быть Таблица, Документ или Web приложение. Все они реализуются через HtmlService. Например,
SpreadsheetApp.getUi().showModelessDialog(htmlOutput, "title");
Понятно, что в построенном
htmlOutput
, можно выполнить код для текущего window
. Например,
window.open(url, "_blank");
Идея обернутая кодом ниже по тексту.
Пользователь выбирает ячейку в Таблице (или все, что угодно, что формирует ссылку). На сервере
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function onOpen() { | |
SpreadsheetApp.getUi().createMenu("User Menu").addItem("Open url", "openUrl").addToUi(); | |
} | |
function openUrl(){ | |
var url = SpreadsheetApp.getCurrentCell().getValue(); | |
var tmp = HtmlService.createTemplateFromFile("index"); | |
tmp.url = url; | |
tmp.isUrl = /^(http|www)/.test(url); | |
var htmlOutput = tmp.evaluate(); | |
SpreadsheetApp.getUi().showModelessDialog(htmlOutput, "title"); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<base target="_top"> | |
<noscript> | |
<meta http-equiv="refresh" content="0; url=https://google.com" > | |
</noscript> | |
</head> | |
<body> | |
<div id="message"></div> | |
<script> | |
var isUrl = <?!= isUrl ?> ; | |
var url = <?= url ?>; | |
if (isUrl) { | |
var newWin = window.open(url, "_blank"); | |
if(!newWin || newWin.closed || typeof newWin.closed=='undefined'){ | |
document.getElementById("message").innerHTML = | |
'Pop-ups blocked! <a href="https://support.google.com/chrome/answer/95472" target="_blank">Enable</a>.'; | |
} else { | |
google.script.host.close(); | |
} | |
} else { | |
document.getElementById("message").innerHTML = `${url} is not an url!`; | |
} | |
</script> | |
</body> | |
</html> |
Этот метод имеет существенный недостаток. Современные браузеры запрещают открытие новых вкладок и окон без разрешения пользователя. Поэтому придется добавить правило в ваш браузер. Для Google Chrome перейдите по адресу chrome://settings/content/popups и добавьте в список разрешенных правило
https://[*.]google.com:443
А как практически это реализовать? Есть пример?
ОтветитьУдалитьПросто копируете весь код, который приведен в проекте к себе в проект и запускаете.
УдалитьИ html тоже?
УдалитьДа, в вашем проекте, который должен быть container-bound в какой-либо Таблице. Потом либо появится меню, либо вы можете запустить функцию openUrl() из проекта. В активной ячейке в это время должен быть какой-либо url.
Удалитьurl как текст или гиперссылка?
УдалитьОкно title открывается и через секунду закрывается, а url из ячейки не открывается.
Посмотрите: https://docs.google.com/spreadsheets/d/1v4qnhVCon0H6YfV6mhN5LWThAIUP5mSV_vWWaal-f8w/edit?usp=sharing
Ок, согласен. Вам необходимо обновить настройки браузера в части всплывающих окон. Я обновил пост, чтобы было понятно как это сделать для Google Chrome
УдалитьСпасибо, всё получилось.
УдалитьГода 3 тому, тоже задавался таким вопросом, когда писал программу для учета личных финансов.
ОтветитьУдалитьВ общем пришел к такому же выходу через html сервис.
И реализация примерно такая же. Но также надо учитывать и то что у пользователя может быть какой-нибудь блокировщик скриптов который не позволит выполнить js.
На этот случай я добавил
< noscript >
< meta http-equiv="refresh" content="0; url=https://..." >
< /noscript >
---
G-Apps-Script.COM - Русскоязычный учебник по google скриптам.
Не понятно, как это поможет. Если запрещено исполнение активного содержимого, то использование Таблиц будет сводиться к чтению сообщения о невозможности исползования.
УдалитьБывают различные способы блокирования скриптов.
УдалитьЯ имел ввиду о блокировании скриптов во фреймах.
Окна созданные при помощи html-сервис, их контент находится во фрейме.
Понятно что если глобально отключен js, этот тег не поможет.
Так как таблица и вовсе не запуститься.
А, понятно. А можно пример? Мне кажется, что я что-то полезное упускаю.
УдалитьОбновил код проверки всплывающих окон. Теперь скрипт предлагает из включить, если не может открыть адрес.
ОтветитьУдалить