Html 用于打开 URL 的 Google Apps 脚本
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10744760/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Google Apps Script to open a URL
提问by PY_
Is there a way to write a google apps script so when ran, a second browser window opens to www.google.com (or another site of my choice)?
有没有办法编写谷歌应用程序脚本,以便在运行时,第二个浏览器窗口会打开 www.google.com(或我选择的其他网站)?
I am trying to come up with a work-around to my previous question here: Can I add a hyperlink inside a message box of a Google Apps spreadsheet
我正在尝试解决我之前的问题: Can I add a hyperlink inside a message box of a Google Apps电子表格
回答by Serge insas
You can build a small UI that does the job like this :
你可以构建一个小的 UI 来完成这样的工作:
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);
}
If you want to 'show' the URL, just change this line like this :
如果您想“显示”URL,只需像这样更改这一行:
var link = app.createAnchor(href, href).setId("link");
EDIT : link to a demo spreadsheetin read onlybecause too many people keep writing unwanted things on it (just make a copy to use instead).
编辑:链接到只读的演示电子表格,因为太多人一直在上面写不需要的东西(只需复制一份即可使用)。
EDIT : UiApp was deprecated by Google on 11th Dec 2014, this method could break at any time and needs updating to use HTML service instead!
编辑:UiApp 于 2014 年 12 月 11 日被 Google 弃用,此方法可能随时中断,需要更新以使用 HTML 服务!
EDIT : below is an implementation using html service.
编辑:下面是使用 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");
}
回答by Stephen M. Harris
This function opens a URL without requiring additional user interaction.
此功能无需额外的用户交互即可打开 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 ..." );
}
This method works by creating a temporary dialog box, so it will not work in contexts where the UI service is not accessible, such as the script editor or a custom G Sheets formula.
此方法通过创建一个临时对话框起作用,因此它在 UI 服务不可访问的上下文中不起作用,例如脚本编辑器或自定义 G Sheets 公式。
回答by TheMaster
window.open(url)
1does open web pages automatically, provided pop- up blockers are disabled(as is the case with Stephen's answer)
window.open(url)
1会自动打开网页,前提是禁用了弹出窗口阻止程序(斯蒂芬的回答就是这种情况)
openUrl.html
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:
代码.gs:
function modalUrl(){
SpreadsheetApp.getUi()
.showModalDialog(
HtmlService.createHtmlOutputFromFile('openUrl').setHeight(50),
'Opening StackOverflow'
)
}
回答by Rubén
Google Apps Script will not open automatically web pages, but it could be used to display a message with links, buttons that the user could click on them to open the desired web pages or even to use the Window objectand methods like addEventListener()to open URLs.
谷歌Apps脚本不会自动打开网页,但它可以被用于显示的链接,按钮的消息,用户可以在他们点击打开所需的网页或甚至使用Window对象等方法的addEventListener()到打开网址。
It's worth to note that UiApp is now deprecated. From Class UiApp - Google Apps Script - Google Developers
值得注意的是,UiApp 现在已被弃用。来自UiApp 类 - Google Apps 脚本 - Google Developers
Deprecated. The UI service was deprecated on December 11, 2014. To create user interfaces, use the HTML serviceinstead.
已弃用。UI 服务已于2014 年 12 月 11 日弃用。要创建用户界面,请改用HTML 服务。
The example in the HTML Service linked page is pretty simple,
HTML 服务链接页面中的示例非常简单,
Code.gs
代码.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');
}
A customized version of index.html to show two hyperlinks
自定义版本的 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>
回答by OaklandFanatic
Building of off an earlier example, I think there is a cleaner way of doing this. Create an index.html
file in your project and using Stephen's code from above, just convert it into an HTML doc.
基于较早的示例,我认为有一种更简洁的方法可以做到这一点。index.html
在您的项目中创建一个文件并使用上面的 Stephen 代码,只需将其转换为 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>
Then, in your Code.gs
script, you can have something like the following,
然后,在你的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 ..." );
}