繁体   English   中英

Function 将 undefined 传递给 Google Apps 脚本中调用的 function

[英]Function passes undefined to called function in Google Apps Script

我是 Google Apps 脚本的新手,有些功能似乎很难让我理解。 在我的代码中:(仔细查看正文末尾附近的脚本元素)

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <style>
//some code ... 
    </style></head>
  <body>
  <div><h1>Cabeçalho escolar</h1></div>
  <div class="palco">
    <img id="dataShow"/>
 </div>
 
  <script>
    function whenReady(dataImage) //shows the content png image 
    {
       document.getElementById("dataShow").scr = "image/png;base64;"+dataImage; //I dont know if this will work; dataImage should be a base64Encode output from a blob png (that was zipped together with others files) 
//the second parameter is a index to pick up the png file.
    }
       google.script.run.withSuccessHandler(whenReady).getFromZippedData("example.zip",0) 
    
    </script>
</body>
</html>

getFromZippedData function 应该将其返回值传递给whenReady function。 但是,为此,它调用另一个 function ( getPic ),将其第一个参数传递给这样的 function。 见下图:

function getPic(fileName) {

var pasta = 'DirectoryName'; 
var arquivos = DriveApp.getRootFolder().getFoldersByName(pasta).next().getFiles(); // yes, the first match... for while, assume that exists such folder
  while( arquivos.hasNext() )
  {
    var candidato = arquivos.next();
    if( candidato.getName() === fileName )
    {
      return Utilities.unzip( candidato.getBlob() );
    }
  }
  Logger.log("Erro ao procurar o arquivo \""+fileName+"\" na função getPic") // aula 
  return null;
}

function getFromZippedData( picFile , num )
{

  var slides = getPic( picFile ); // <-- THIS IS THE POINT (main)
   if( 0 < num )
     num = 0;
   if( num >= slides.length )
     num = slides.length - 1;
   return Utilities.base64Encode( slides[num] );
}

问题

没有参数从getFromZippedFile传递给getPicLogger指责undefined的参数给picFile )。

问题?

如何正确地将参数从 function 传递到“google-side” function? 使用的参数是原始 javascript 类型,如 Google Apps 脚本参考中所述。 是否需要“谷歌端”function?

附带问题(如果不暗示“重复”)

如何在 HTML 文档中显示解压缩的 Blob(即 png 图像)的内容?

抱歉,如果我提出了一个愚蠢的问题,但我在这方面花了很多时间。 修改了这个最小的代码,但可能有问题。 我现在真的很累。 可能会出现一些错误。 忽略它们(如果可能的话)并向我提供有关它们的建议。

我相信你的问题如下。

  1. 您想知道No parameter is pass from getFromZippedFile to getPic (Logger accuses undefined paramter to picFile.)问题的原因。
  2. 您想将解压缩的 PNG 图像放在 HTML 端。

为此,这个答案怎么样?

答案1:

我认为您的问题的原因是Utilities.base64Encode( slides[num] ); slides[num] slides[num] Blob 在这种情况下,请使用字节数组。 因此,请按如下方式修改您的脚本。

从:

return Utilities.base64Encode( slides[num] );

至:

return Utilities.base64Encode(slides[num].getBytes());
  • 在这种情况下,从您的脚本中,它假定slides[num]是 blob。

答案 2:

我认为将 base64 编码图像放在 HTML 端有一个修改点。 请进行如下修改。

从:

document.getElementById("dataShow").scr = "image/png;base64;"+dataImage;

至:

document.getElementById("dataShow").src = "data:image/png;base64,"+dataImage;

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM