我在这个假期工作,发现我的代码不适用于HTTPS。我的LOCALDEV是HTTP,我们的生产服务器是HTTPS。
由于某些原因,当我在本地使用时,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('');
})
=============================================== ===================================
我的构建中没有该目录。
答案 0 :(得分:23)
我以为我会分享我的经验,希望别人可以得到帮助。可能不适合其他人。
我正在请求以下网址:
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”
希望这有助于某人
答案 1 :(得分:9)
TLDR :尝试在对YUI的调用中设置base
配置属性。
我没有使用YUI,但一般来说,来自HTTPS站点的请求应始终打到其他HTTPS站点(否则您将看到不安全的内容警告,或者您发现的请求被阻止)。这就是问题所在。
我有两个选项可以解决这个问题:
配置YUI以从HTTPS站点请求。 Google's AjaxAPIs确实已将其托管并did support SSL,但它似乎已从Google's list of hosted libraries中移除。 post in the YUI forums by a YUI developer in 2011表示由于Google的CDN不支持组合处理,Google停止托管新版YUI。所以这不是一个真正的选择,有些人认为external scripts loaded over HTTPS are bad无论如何。
配置YUI以从本地服务器加载内容。这要求您的javascript不仅在本地存在,而且还将由您的服务器在特定URL处提供。除了将您的初始script
标记指向您本地托管的YUI脚本之外,通过在您对YUI的调用中设置looks like config属性来完成配置客户端加载的base
(或{ {3}}如果您使用的是组合加载器 - 但这意味着您必须comboBase
)。
例如,如果您的YUI lib在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/'
;我没有方便测试的服务器 - 如果有的话,请报告哪些有用!)
答案 2 :(得分: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-served-yui3.html本地加载YUI的好文章