簡體   English   中英

Google Picker API Invalid origin value 錯誤

[英]Google Picker API Invalid origin value error

今天,Google Picker 停止在我的 Google Sheets 插件中工作,而無需對代碼進行任何更改。 模態對話中的錯誤如下:

原始值無效。

控制台中的錯誤是:

無法在“DOMWindow”上執行“postMessage”:提供的目標來源(“https://docs.google.com”)與收件人窗口的來源(“https://n-a6p4dqsl***d6wq-0lu”不匹配-script.googleusercontent.com')

刪除 postMessage.. 來自意外的 window

刪除 postMessage.. 來自意外的 window

加載“https://docs.google.com/picker?protocol=gadgets&origin=https%3A%2F%2Fdocs.google.com%2F&sdr=true&title&oauth_token=<oathToken>&developerKey=時遇到無效的“X-Frame-Options”header <developerKey>&hostId=n-a6p4dq***d6wq-0lu-script.googleusercontent.com&relayUrl=https%3A%2F%2Fn-a6p4dq***d6wq-0lu-script.googleusercontent.com%2Ffavicon.ico&nav=((% 22documents%22%2Cnull%2C%7B%22selectFolder%22%3Atrue%2C%22parent%22%3A%22root%22%7D)%2C(%22documents%22%2Cnull%2C%7B%22dr%22%3Atrue% 2C%22includeFolders%22%3Atrue%7D))&rpcService=qhurmoc5w4l7&rpctoken=xssf8g42xc2&thirdParty=true#rpctoken=xssf8g42xc2': 'ALLOW-FROM https://docs.google.com/'的指令未被識別 header 將被忽略。

可能錯誤與我執行setOrigin()的這行代碼有關:

        var picker = new google.picker.PickerBuilder()
            .addView(driveView)
            .addView(drivesView)
            .hideTitleBar()
            .setOAuthToken(token)
            .setDeveloperKey(DEVELOPER_KEY)
            .setCallback(pickerCallback)
        --> .setOrigin(google.script.host.origin)
            .setSize(DIALOG_DIMENSIONS.width - 2,
                DIALOG_DIMENSIONS.height - 2)
            .build();

但是這條線直接來自Google Picker API 的文檔並且之前工作正常。 If I change google.script.host.origin , that returns https://docs.google.com as url to https://n-a6p4dqsl***6wcd6wq-0lu-script.googleusercontent.com , I get the same error和一個新的,所以不是這樣。

我也無法將其添加為 GCP 項目中的授權 javascript 來源,因為它返回以下錯誤:

Invalid Origin:使用禁止域

(這已經有一段時間了

這似乎是一個新錯誤,我在 Google 的問題跟蹤器和 StackOverflow 上都找不到答案。

任何人都面臨這個問題或知道如何處理它?

結束,解決這個問題的唯一方法是在

docs.google.com/

docs.google.com

相反,

google.script.host.orgin 給出了導致錯誤的“https://docs.google.com/”。 因此,您需要硬編碼為

“https://docs.google.com”

谷歌最近做了一些改變,這可能會引發這個問題。

更新

您可以使用此 function - 並調用 - ...... setOrigin(getOrigin())

function getOrigin() {
    var url = google.script.host.origin;
    return url.substr(url.length - 1) === "/" ? url.substr(0, url.length - 1) : url;
}

用於 iframe 的解決方案

https://developers.google.com/apps-script/guides/dialogs#code.gs_2

代碼.gs

         function showPicker() {
          var html = HtmlService.createHtmlOutputFromFile('dialog.html')
              .setWidth(600)
              .setHeight(425)
              .setSandboxMode(HtmlService.SandboxMode.IFRAME);
          SpreadsheetApp.getUi().showModalDialog(html, 'Select a file');
    }


.setSandboxMode(HtmlService.SandboxMode.IFRAME); 
//can be removed or replaced with
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);

對話框.html

function getOrigin() {
        var url = "https://mydomain.name/";
        return url.substr(url.length - 1) === "/" ? url.substr(0, url.length - 1) : url;
    }

更新

現在它無需對代碼進行任何更改即可工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM