[英]Google Picker setVisible throw "Incorrect origin value. " error
[英]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.