嵌入到Google Sites网站的HTML能否正常使用Cookies?
Google Sites里嵌入的HTML确实是放在沙盒化的iframe里的,默认情况下完全禁用了Cookie权限,所以你没法用常规Cookie来存最高分。这是Google出于安全考虑设置的严格限制,避免嵌入内容滥用用户数据。
给你几个可行的替代方案:
用Google Apps Script的Properties服务持久化存储
这是最靠谱的跨设备方案。你可以写个简单的GAS脚本,用PropertiesService.getUserProperties()来存储每个用户的最高分(需要用户登录Google账号),然后在你的游戏里通过fetch()API和这个脚本交互,提交或获取分数。
举个简单的GAS代码示例:function doGet(e) { const userProps = PropertiesService.getUserProperties(); const highScore = userProps.getProperty('highScore') || 0; return ContentService.createTextOutput(highScore).setMimeType(ContentService.MimeType.JSON); } function doPost(e) { const userProps = PropertiesService.getUserProperties(); const newScore = parseInt(e.parameter.score); const currentHigh = parseInt(userProps.getProperty('highScore') || 0); if (newScore > currentHigh) { userProps.setProperty('highScore', newScore.toString()); } return ContentService.createTextOutput('success').setMimeType(ContentService.MimeType.TEXT); }部署这个脚本为Web应用,然后在你的游戏HTML里用fetch调用这个接口就行。
用localStorage存本地数据(仅限同一设备)
如果不需要跨设备同步,只是让用户在自己的浏览器里保留分数,可以试试在嵌入的HTML里用localStorage。不过要注意,Google Sites的iframe沙盒可能会限制这个,你得实际测试下——如果是自己托管的HTML文件(不是直接在Google Sites的嵌入框里写的),成功概率更高。代码示例:// 存最高分 function saveHighScore(score) { const currentHigh = parseInt(localStorage.getItem('gameHighScore')) || 0; if (score > currentHigh) { localStorage.setItem('gameHighScore', score.toString()); } } // 获取最高分 function getHighScore() { return parseInt(localStorage.getItem('gameHighScore')) || 0; }URL参数临时传递(仅会话内有效)
如果只是游戏过程中临时保存分数,不需要持久化,可以用URL参数来传递,但页面关闭后数据就没了,适合临时记录。
最后提醒下:Google Sites的沙盒规则可能会调整,所有方案都要在实际的Google Sites页面里测试,别只在本地环境验证。
内容的提问来源于stack exchange,提问作者lilyoy79

