我正在开发一个依赖于jQuery的javascript小部件.小部件可能会也可能不会加载到已加载jQuery的页面上.在这种情况下出现了许多问题......
如果网页没有jQuery,我必须加载自己的jQuery.然而,这样做时似乎有一个微妙的时间问题.例如,如果我的窗口小部件在jQuery完成加载和执行之前加载并执行,我会收到jQuery is not defined错误.
如果网页确实有jQuery,我通常可以使用它.但是,如果jQuery版本是旧版本,我想加载自己的版本.但是,如果我自己加载,我需要以不踩它们的$变量的方式来做.如果我设置jQuery.noConflict()并且他们的任何脚本依赖$,那么我刚刚打破了他们的页面.
如果网页使用另一个javascript库(例如原型),我也需要对原型的$变量敏感.
由于以上所有,似乎更容易不依赖于jQuery.但是在我走这条路之前,我想先重写我的小部件代码.
我的代码的基本框架,包括时序错误和有时$错误,如下:
<script type="text/javascript" charset="utf-8">
// <![CDATA
if (typeof jQuery === 'undefined') {
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = '{{ URL }}/jquery.js';
head.appendChild(script);
}
// ]]>
</script>
<script type="text/javascript" src="{{ URL }}/widget.js"></script>
Run Code Online (Sandbox Code Playgroud)
我的小部件具有以下结构:
(function($) {
var mywidget = {
init: function() {
...
}
};
$(document).ready(function() {
mywidget.init();
});
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
如果有任何指针或资源来实现可以在所有提到的环境中工作的小部件,那么他们将非常感激.
我创建了一个基于Mathias Bynens优化的Google Analytics异步脚本的简短函数,如下所示:
function async(src) {
var d = document, t = 'script',
o = d.createElement(t),
s = d.getElementsByTagName(t)[0];
o.src = '//' + src;
s.parentNode.insertBefore(o, s);
}
Run Code Online (Sandbox Code Playgroud)
这很好用,我已经开始将它用于几个不同的脚本
// Crazy Egg
async('dnn506yrbagrg.cloudfront.net/pages/scripts/XXXXX/XXXXX.js?' + Math.floor(new Date().getTime() / 3600000));
// User Voice
var uvOptions = {};
async('widget.uservoice.com/XXXXX.js');
// Google Analytics
var _gaq = [['_setAccount', 'UA-XXXXX-XX'], ['_setDomainName', 'coachup.com'], ['_trackPageview']];
async('google-analytics.com/ga.js');
// Stripe
async('js.stripe.com/v1');?
Run Code Online (Sandbox Code Playgroud)
当我遇到需要在加载后调用的脚本时出现问题:
// Snap Engage
async('snapabug.appspot.com/snapabug.js');
SnapABug.init('XXXXX-XXXXX-XXXXX-XXXXX-XXXXX');
Run Code Online (Sandbox Code Playgroud)
所以我想我会把它变成一个回调函数,可以这样使用:
async('snapabug.appspot.com/snapabug.js', function() {
SnapABug.init('XXXXX-XXXXX-XXXXX-XXXXX-XXXXX');
});
Run Code Online (Sandbox Code Playgroud)
我没想到这对我来说很难做到,但结果却是这样.
请参阅jsfiddle:http: …
是否可以直接从 HTML 标签传递变量<script>:
<script async src="https://example.com/lib.js" site="test.com"></script>
Run Code Online (Sandbox Code Playgroud)
这样lib.js可以site像常规变量一样访问?
在我的HTML文件中,我已经链接到JS:
src="myscript.js?config=true"
Run Code Online (Sandbox Code Playgroud)
我的JS能直接读取这个var的值吗?
alert (config);
Run Code Online (Sandbox Code Playgroud)
这不起作用,FireFox错误控制台说"配置未定义".如何读取JS文件中通过src属性传递的变量?这很简单吗?
可能重复:
如何从脚本路径获取查询字符串值?
我有:
index.html的:
...
<script src="myscript.js?param1=1¶m2=2">
...
Run Code Online (Sandbox Code Playgroud)
myscript.js:
function getScriptParam(paramName){
// How to determine the script parameters value?
var value = HOW TO DO?;
return value;
}
var param1 = getScriptParam('param1'); // param1 should be '1'
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在构建一个Rails 4应用程序,我想要做的是为我的用户提供通过嵌入代码将我的内容嵌入他们自己的网站(如他们的博客)的选项.
换句话说,我想要一个包含一些内容的erb页面,以及一个显示"Embed"的按钮.当用户点击它时,会出现一小部分可嵌入代码,他们可以将这些代码复制并粘贴到他们的博客上等.这将显示我页面中的内容.
解决这个问题的最佳方式是什么?请尽可能具有描述性,因为我对此不熟悉.谢谢!