prototype.js和其他一些js的冲突

时间:2013-04-05 17:41:52

标签: javascript prototypejs

我对javascript知之甚少,而且我没有任何知道javascript的朋友:(这就是为什么我再次向stackoverflow社区寻求帮助。 我的脚本有一个新模板,但问题是我在prototype.js上有一些冲突,我的脚本需要从模板中使用一些js,我不知道如何解决这个问题,因为模板没有注释js,主js和脚本将无法正常工作没有原型js 我不知道是否有人有时间查看脚本并可能提供合并它们的解决方案,因为是大脚本,最后我会尝试。

我已在某些位置上传了这些脚本,并在此处添加了链接

pastebin.com/n5dnr6i7 here is the main.js required for template

pastebin.com/YisnTuBM comments.js recuired for template

pastebin.com/Cibn1NA2 prototype.js required for main script  

评论和主要文件无法正常加载原型

提前谢谢!

编辑:我很抱歉用Java发布此内容感谢您进行更正

编辑2: 问题是网页脚本是用IonCube加密的,我只能访问模板html文件,它有点复杂,因为模板是用于修改/破解的网页脚本,我正在使用它,它是一个视频管脚本,例如我使用comments.html中包含的comments.html的原始网页脚本,破解/修改是不同的,我必须在新的video.html模板中包含旧的comments.html文件,现在,如果我使用jquery-1.9.1评论区域框向下滑动,因为它应该当我点击它但我不能评论视频如果我使用原型我可以评论视频但评论区域框冻结它doesent滑下来当我点击它,我没有想法如何合并它们

1 个答案:

答案 0 :(得分:0)

我添加了这些文件to a jsfiddle,您确定甚至需要Prototype吗?我已将其评论出来并替换为jQuery(因为评论文件似乎需要它,组合的[main]文件也是如此)。

执行此操作后,我在页面加载时没有错误。

<!-- prototype -->
<!--script src="http://pastebin.com/raw.php?i=Cibn1NA2"></script-->

<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<!--script>jQuery.noConflict();</script-->

<!-- comments -->
<script src="http://pastebin.com/raw.php?i=YisnTuBM"></script>

<!-- main = Modernizr + extras -->
<script src="http://pastebin.com/raw.php?i=n5dnr6i7"></script>

修改评论 Second fiddle以显示jQuery的使用noConflict()

设置 - 要么取消注释两个脚本标记,要么尝试对其中一个进行评论以查看您获得的错误。

测试使用jQuery的addClass函数和Prototype的addClassName函数,以查看哪个版本的$处于活动状态。其中一种或另一种方法将失败,具体取决于当时$处于活动状态。

<!-- Comment one of these script tags, or leave both uncommented for noConflict mode -->
<!-- jQuery must come second in order to properly use noConflict -->
<script src="https://ajax.googleapis.com/ajax/libs/prototype/1.7.1.0/prototype.js"></script>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>

测试:

// local var for jQuery - this might be undefined if jQuery not imported
var jQuery = window["jQuery"];
// if jQuery exists, put into noConflict mode - i.e. return jQuery $ to Prototype $
if (jQuery) jQuery.noConflict();

try {
    // addClassName is prototype only, not jquery
    $("output").addClassName("prototype");
    setOutput("$.addClassName ok");
} catch (e) {
    setOutput("Prototype > $.addClassName error: " + e);
}

try {
    // addClass is jquery only, not prototype
    $("output").addClass("jquery");
    setOutput("$.addClass ok");
} catch (e) {
    setOutput("jQuery > $.addClass error: " + e);
}

try {
    // try using jQuery with the 'full' jQuery name
    jQuery("output").addClass("jquery");
    setOutput("jQuery.addClass ok");
} catch (e) {
    setOutput("jQuery > jQuery.addClass error: " + e);
}

// wrap the code that needs $ to be jQuery $ in a function.
// and pass in jQuery to be aliased as $ within the function.
(function($) {
    try {
        $("output").addClass("jquery");
        setOutput("$.addClass ok when wrapped");
    } catch (e) {
        setOutput("jQuery > wrapped $.addClass error: " + e);
    }
}(jQuery));

包含Prototype和jQuery时的示例输出:

$.addClassName ok
jQuery > $.addClass error: TypeError: $(...).addClass is not a function
jQuery.addClass ok
$.addClass ok when wrapped