【问题标题】:Determine if active tab contains an editable Google Doc确定活动选项卡是否包含可编辑的 Google 文档
【发布时间】:2017-04-29 23:19:17
【问题描述】:

假设我的扩展使用How can I get the current tab URL for chrome extension?中建议的方法获得了当前活动标签的URL,例如

chrome.tabs.query({
    active: true,
    lastFocusedWindow: true
}, function (tabs) {
    // use first tab to obtain url
    var tab = tabs[0];
    var url = tab.url
});

如何确定网址是否引用了我拥有编辑权限的 Google 文档?所有权和受邀合作者之间的区别对于此应用程序并不重要。我只对文档感兴趣,而不是电子表格或表单。

有关我正在尝试开发的内容的上下文,请参阅:How to manually generate notifications to a Google Doc collaborator?

【问题讨论】:

    标签: javascript google-chrome-extension google-drive-api google-docs-api


    【解决方案1】:

    替代答案,基于 Google Drive API 而不是 Google Docs UI。

    在执行任何此操作之前,请确保在清单中使用 declare permissions(以仅匹配看起来像 docs.google.com/document/* 的 URL)。

    以下是您可以遵循的步骤的大致概述:

    1. GET a file, 这将返回一些元数据。您可以使用必须的 URL 来提取 GET 请求中使用的相关 ID。

    2. 使用此元数据file resource 检索permissions resource

    3. 在权限资源中,查看role 属性:它将是ownerreaderwriter。如果您是 reader,则您将没有编辑权限,但其他情况下您应该拥有编辑权限。

    【讨论】:

    • 仅供参考:在您的两个答案中,您应该首先检查 URL 是否指向可能/确实包含 Google Doc 的域/页面。现在,您只是盲目地假设当前页面是 Google Doc。虽然这两种方法都不太可能将某个随机页面错误地识别为可编辑的 Google 文档,但人们永远不会知道。
    • 这似乎是一个不错的方法。我还发现了一个有用的讨论,关于如何从stackoverflow.com/questions/16840038/…的 url 中提取 fileid
    【解决方案2】:

    这是一个谷歌文档的并排视图,我在其中创建了一个文档,生成了一个共享链接,然后在我没有登录谷歌的浏览器中打开它。我建议使用内容脚本插入“查找”函数,如果它可以在 DOM 中找到“仅查看”按钮(“仅查看”意味着您没有编辑权限,则该函数将返回 truefalse )。您可以使内容脚本仅匹配看起来像 docs.google.com/document/* 的 URL。

    注意:Google 会频繁更改 UI,因此这可能无法适应未来。尝试在这两种情况下检查谷歌文档的来源以寻找更多线索。

    并排视图:

    chrome devtools 中的源代码:

    【讨论】:

    • 谢谢,诺姆,我会赞成快速响应。当然,这是一种方法,但对 UI 的依赖让我不愿意投入精力去解决谷歌明天可能会打破的东西。我希望有人可以向我指出可能更稳定的 API 调用。
    • 感谢您的反馈。使用 Google Drive API 会更可靠,我会推荐这种解决方案。我也会对此进行一些研究并回复您
    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 2020-02-18
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    相关资源
    最近更新 更多