【问题标题】:CORS issue on ajax call in scriptlab脚本实验室中 ajax 调用的 CORS 问题
【发布时间】:2017-09-16 03:44:27
【问题描述】:

我正在 excel 中测试 scriptlab 插件

我尝试像这样对外部端点执行休息调用

$.ajax({
            url: "https://jsonplaceholder.typicode.com/posts/1",
            dataType: 'JSON',
            headers: {
              'Authorization': 'Basic blablabla',
            })....

以上工作正常。但是在启用 CORS 的端点上,我得到了一个 xhr.readyState 0 返回。

如何避免 CORS 问题? (我不是终点的拥有者)

【问题讨论】:

    标签: office-js scriptlab


    【解决方案1】:

    您应该修改您的清单文件并添加到AppDomains 标记您的域以被应用程序信任。默认情况下,您的加载项可以加载与 SourceLocation 元素中指定的位置位于同一域中的任何页面。要加载与加载项不在同一域中的页面,请使用 AppDomains 和 AppDomain 元素指定域。

    【讨论】:

    • 这不是 Script Lab 的选项,因为这是一个带有静态清单的商店加载项 - 但带有 OP 要调用的动态 URL。但它可能适用于独立加载项。
    • ... 虽然想起来了,但我不知道 AJAX 调用是否受 AppDomains 约束(实际上不应该)。页面导航,是的,但不是服务调用。 OP 说它适用于非 CORS 网址...
    • 这就是我的想法,OP 正在尝试将其作为插件的支持,已下载并进行了修改以实现自定义。
    【解决方案2】:

    首先,感谢您试用Script Lab

    我首先要回答以下问题:是 Office 加载项和/或脚本实验室特有的问题。最简单的方法可能是尝试不同的 JS 游乐场,例如 JSFiddle 或 CodePen。你能在那里打电话吗?这将隔离 CORS 和应用程序域的问题(Slava 提到的)。虽然

    就一般指导而言,我认为您有几种选择

    • 您正在调用的服务可能允许特定 URL 的例外情况(即,它可能会要求您提供您将从中调用的 URL,并将该 URL 列入白名单)。如果是这样,请给它https://script-lab-runner.azureedge.net 的 URL(该 URL 本身不会像预期的那样被 POST 解析;但是您编译的运行 sn-p 最终会耗尽它)。
    • 您可以创建自己的服务器(或者可能是一个非常小的计算单元,例如Azure Function)来代表您在服务器端进行调用(CORS 不是问题)。您可以让 Azure 函数本身接受 CORS。这样,您实际上是通过您自己的服务器代理请求,您可以启用 CORS。

    希望这会有所帮助!

    【讨论】:

    • 脚本实验室迫使我使用 jsonp,因为 CORS 用于位于 localhost 的 url。 ajax 调用使用 POSTMAN 可以正常工作。有什么想法吗?
    • 为什么它在邮递员中有效但在 Script Lab 中无效:请参阅stackoverflow.com/questions/25291840/… 这与您在任何浏览器端调用中遇到的问题相同,它并非特定于 Script Lab。
    • 脚本实验室如何添加jQuery?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多