6

我在这个假期工作,发现我的代码无法在 HTTPS 上运行。我的 LOCALDEV 是 HTTP,我们的生产服务器是 HTTPS。

出于某种原因,当我在本地拥有 JS 时,YUI 会出去获取 JS。

在此处输入图像描述

我在服务器上…………

在此处输入图像描述

最后是我的代码:

    YUI().use('autocomplete', 'autocomplete-filters', 'autocomplete-highlighters', function (Y) {

    var notes = [
        "Dr Follow Up Complete Notes",
        "Fax Document Notes",
        "Event Notes",
        "Email Information Notes",
        "Corresponding Document Notes",
        "Return Call Notes",
        "Admit Notes",
        "Discharge Notes",
        "Other Notes",
        "Excellent Resource Notes",
        "Good Resource Notes",
        "Neutral Resource Notes",
        "Poor Resource Notes",
        "Unacceptable Resource Notes",
    ];

    var inputNode = Y.one('#name');

    inputNode.plug(Y.Plugin.AutoComplete, {
        resultFilters    : 'phraseMatch',
        resultHighlighter: 'phraseMatch',
        source           : notes,
        minQueryLength   : 0
    });
    inputNode.ac.get('boundingBox').setStyle('zIndex', 50);
    inputNode.on('focus', function () {
        inputNode.ac.sendRequest('');
    })

==================================================== =================================

这是在我添加之后:base: 'include/javascript/yui3/build'

在此处输入图像描述

我的构建中没有那个目录。

4

3 回答 3

24

我想我会分享我的经验,希望可以帮助其他人。可能不适用于他人。我正在请求以下网址: http://yui.yahooapis.com/combo?2.6.0/build/yahoo-dom-event/yahoo-dom-event.js&2.6.0/build/animation/animation-min.js

但是需要 https,所以我只是将其从 http 更改为 https 并收到一个安全警告,即证书对该域无效。我查看了有效域并注意到“yui-s”并认为“嗯嗯安全版本?”

然后我尝试了这个: https://yui-s.yahooapis.com/combo?2.6.0/build/yahoo-dom-event/yahoo-dom-event.js&2.6.0/build/animation/animation-min.js

效果很好。因此,其他人尝试更改为 https,如果您的子域是“yui”,请将其更改为“yui-s”

希望这可以帮助某人

于 2013-12-12T15:58:13.200 回答
9

TLDR:尝试base在对 YUI 的调用中设置配置属性。

我没有使用过 YUI,但一般来说,来自 HTTPS 站点的请求应该总是命中其他 HTTPS 站点(否则你会看到不安全的内容警告,或者你发现的请求被阻止)。所以这就是问题所在。

你有两个我能想到的选项来解决这个问题:

  1. 将 YUI 配置为从 HTTPS 站点请求。Google 的 AjaxAPI确实托管了它并支持 SSL,但它似乎已从Google 的托管库列表中删除。YUI 开发人员在 2011 年在 YUI 论坛上的一篇帖子表明,由于 Google 的 CDN 不支持组合处理,Google 停止托管新版本的 YUI。所以这不是一个真正的选择,有些人认为通过 HTTPS 加载的外部脚本无论如何都是不好的。

  2. 配置 YUI 以从本地服务器加载内容。这要求您的 javascript 不仅在本地存在,而且还将由您的服务器在特定 URL 处提供。除了使您的初始script标记指向您本地托管的 YUI 脚本之外,看起来配置客户端加载是通过base在您对 YUI 的调用中设置 config 属性来完成的(或者comboBase如果您使用的是组合加载器 - 但这意味着您d 必须设置自己的 YUI 组合加载器)。

例如,如果您的 YUI 库位于https://mydomain.com/static/js/yui_3.6.0/yui/build/(并且您的页面位于,比如说https://mydomain.com/sample/page),那么您可以执行以下操作:

<script src="https://mydomain.com/static/js/3.6.0/yui/build/yui-min.js"></script>

然后在您的 javascript 文件中:

YUI({ 
    base: 'static/js/yui_3.6.0/yui/build/'
}).use('node', 'event', function(Y) { 
    ...
})

(或者可能base: '/static/js/yui_3.6.0/yui/build/';我没有方便测试的服务器 - 请报告哪个有效,如果有的话!)

于 2012-09-04T02:51:56.877 回答
0

看起来您正在从 CDN 提供初始 yui-min.js 文件。找到这个:

<script type="text/javascript" src="http://yui.yahooapis.com/..."></script>

将其替换为指向 YUI 的本地副本:

<script type="text/javascript" src="/where/you/put/yui/build/yui/yui-min.js"></script>

这应该可以工作并在您的本地服务器上提供必要的 JS。

但是,这不会有任何组合加载,这将导致页面加载(有时会慢很多。您可以在http://blog.endpoint.com/2011/02/locally阅读有关本地组合加载 YUI 的好文章-served-yui3.html

于 2012-09-04T02:48:43.123 回答