Google脚本:Javascript函数window.open在某些情况下不起作用

Google脚本:Javascript函数window.open在某些情况下不起作用,javascript,google-apps-script,Javascript,Google Apps Script,我正在通过谷歌脚本工作 我现在有一个脚本,如果你点击一个框,它应该打开一个新的标签,上面有一个从电子表格中提取的URL 脚本将正确提取正确的URL: var url = mainObj[i].link; 以下脚本将打开正确的URL arr[i].onclick = function open() {window.open("https://drive.google.com/drive/my-drive", "_blank") }; 因此,如果我将URL硬编码到脚本中,window.open

我正在通过谷歌脚本工作

我现在有一个脚本,如果你点击一个框,它应该打开一个新的标签,上面有一个从电子表格中提取的URL

脚本将正确提取正确的URL:

var url = mainObj[i].link;
以下脚本将打开正确的URL

arr[i].onclick = function open() {window.open("https://drive.google.com/drive/my-drive", "_blank") }; 
因此,如果我将URL硬编码到脚本中,window.open似乎可以正常工作。然而,我从电子表格中提取数据,所以我使用for循环迭代这个函数

因此,如果我尝试这样做:

arr[i].onclick = function open() {window.open(mainObj[i].link, "_blank") };
甚至

var url = mainObj[i].link;
arr[i].onclick = function open() {window.open(url, "_blank") };
。。。这两种情况下我都会有400个错误。有什么区别

编辑:我认为这是因为当前变量
url
没有双引号,但当我执行以下操作时,错误仍然存在

var url = '"' + mainObj[i].link + '"';
console.log(url);
arr[i].onclick = function open() {window.open(url, "_blank") };
如果在循环中,在onclick函数中设置“i”索引时,“i”索引不保存,则需要将其封装在匿名函数中,并将“i”传递给此函数

for(var i = 0; i < arr.length; i++){
    (function(i){
        arr[i].onclick = function open() {window.open(mainObj[i].link, "_blank") };
   })(i);
}
for(变量i=0;i
您可以在这里看到一个示例,在第一个功能中,所有按钮都会得到相同的onclick,而secodn是固定的: