在 v8 中使用侧边栏与 Rhino // 不工作与工作



在V8 中运行时侧边栏不起作用但在 Rhino 中运行良好时出现问题。已报告问题跟踪器,但他们无法重现问题...并提及这可能是身份验证问题。希望有人不能帮我弄清楚。

我正在运行两个文件,一个是包含所有代码和 html 文件的 MASTER,另一个是引用 MASTER 文档中库的工作文档。

在具有 html 打开代码的主代码中:

function projektkortNotesSidebar() {
var html = HtmlService.createHtmlOutputFromFile('ProjektKort_html').setTitle('ProjektKort input').setWidth(300);
SpreadsheetApp.getUi().showSidebar(html);
}

在主代码中,点击侧边栏中的发送时要运行的函数:

function insertNoter(dato,venue,accomodation,contract,economy,reference,pr,notes){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sProjektKort = ss.getSheetByName('ProjektKort_New');
var idag = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd");
var datoTitle = "";
if(dato !== ""){
//Indsæt Datonoter
var datoNoterRange = sProjektKort.getRange("D2");
var datoNoterValueOld = datoNoterRange.getValue();
var datoNoterValueNew = idag+"n"+dato+"nn"+datoNoterValueOld;
datoNoterRange.setValue(datoNoterValueNew);
var datoTitle = "Datonoter: ";
}
}

以及用于在主代码中打开侧边栏的菜单:

function onOpen(){
var ui = SpreadsheetApp.getUi();
ui.createMenu('Sidebar')
.addItem('Insert notes', 'projektkortNotesSidebar')        
.addToUi();
}

母版中的 HTML 文件:

<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css">
<!-- The CSS package above applies Google styling to buttons and other elements. -->
<style>
<!-- put your CSS in here-->
.width-100 {
width: 100%;
}
.width-50 {
width: 50%;
}
</style>    <!DOCTYPE html>
<html>
<head>
<base target="_top">
<H1>INDTAST NYE NOTER</H1>
</head>
<body>
<!-- Create a input field to except a value form user, in this case there name -->
<p></p>
<p></p>
<div>
<label for="text-title">Dato noter:</label>
</div>
<div>  
<textarea cols="35" type="text-area" name="dato" rows="3" id="dato" ></textarea>
</div>
<p></p>

<div>
<button class="blue" onclick='sendName()'>Indsæt Noter</button>
</div>
<p></p>

<div>
<input type="button" value="Close" onclick="google.script.host.close()" />
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
function sendName(){
//Get the value of the input field
var dato = document.getElementById("dato").value


google.script.run.insertNoter(dato);
$('#dato').val("");
}
</script>
<p></p>
</body>
</html>

在工作文件中,脚本如下所示,其中IssueTracker是库名称:

function onOpen(){
IssueTracker.onOpen();
}
function insertNoter(dato){
IssueTracker.insertNoter(dato);
}

function projektkortNotesSidebar() {
IssueTracker.projektkortNotesSidebar();
}

运行时: 犀牛//问题跟踪器-167972301
犀牛//大师 - 问题跟踪器-167972301
为所有者和用户工作

Rhino//问题跟踪器-167972301

V8//MASTER - 问题跟踪器-167972301
为所有者和用户工作

V8//问题跟踪器-167972301

V8//主 - 问题跟踪器-167972301
为所有者工作
不为用户工作

V8//问题跟踪器-167972301

犀牛//大师 - 问题跟踪器-167972301
为所有者工作
不为用户工作

https://issuetracker.google.com/issues/167972301

链接到包含两个文件的文件夹

我认为这与 V8 引擎中的范围不同有关。您可以在"将脚本迁移到 V8 运行时"一文中查看不兼容性和差异。

问题是您有两个insertNoter()函数 – 一个在"MASTER"库中,另一个在电子表格的本地脚本中。运行 V8 时,将调用库的版本而不是本地脚本。重命名函数以阐明应调用哪些函数。

.HTML

...
google.script.run.insertNoter(dato);
...

本地脚本

function insertNoter(dato){
IssueTracker.insertNoterLibrary(dato);
}

图书馆

function insertNoterLibrary(*) { ... }

我可以为域外部用户重现您的情况,并为此找到了以下解决方案:

将库的代码传输到单独的独立脚本。

  • 库不必绑定到电子表格
  • 无法显式共享绑定到电子表格的脚本
  • 可能后者是问题的根源

所以

  • 将库中的内容传输到一个空的 App 脚本中,单独站立的应用程序脚本项目
  • 保存项目
  • 继续File-> Share与要访问脚本的用户共享它
  • 从编辑器手动运行文件脚本一次以触发授权流
  • 保存新版本
  • 检索Script ID
  • 将具有新脚本 ID 的新库导入到工作文档中并删除旧库

现在,对于您与之共享它的任何用户,该库应该在 V8 中按预期工作。

HTML 文件存在问题,虽然解决此问题可能无法解决主要问题,但您应该修复它。

<html>旨在成为文档的根目录,但 HTML 文件在其上方有多个标记。要解决此问题,请在<head></head>标签之间放置以下行

<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css">
<!-- The CSS package above applies Google styling to buttons and other elements. -->
<style>
<!-- put your CSS in here-->
.width-100 {
width: 100%;
}
.width-50 {
width: 50%;
}
</style>    

同时将<H1>INDTAST NYE NOTER</H1><head></head>移动到<body></body>

资源

  • https://developer.mozilla.org/en-US/docs/Web/HTML/Element/html
  • https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head
  • https://developer.mozilla.org/en-US/docs/Web/HTML/Element/body

最新更新