我正在尝试构建一个chrome扩展,以便将数据输入到toysrus.com和macys.com等网站的在线表单中。chrome扩展可以将javascript注入到站点中进行测试。我正在尝试确定哪个框架是用来在网站上做表单验证。
我必须更改输入字段,比如选择"CA“作为州,或者使用javascript键入姓氏。但如果我不知道他们使用的是什么系统,我就不能这么做。每个框架都有自己的规则来更改输入字段,并将更改注册到框架中。
我正在尝试看看是否有任何方法来判断哪个框架正在执行验证,以便我可以使用正确的命令。
在toysrus.com的情况下,prototype.js和jquery都在运行,通过检测变量jquery或Prototype是否存在,但我必须使用prototype语法来获取和更改表单中的值,而不是jQuery。我不得不通过大量的试验和错误手动完成这项工作。
有没有什么javascript可以让我编写并注入到页面中,以判断哪个框架正用于验证这些网站上的表单。
我注意到在上面的例子中,$("#elementid")返回null,但是$("elementid")返回一个实际的元素。这告诉我原型正在做实际的验证。有没有什么测试或者js库可以确定元素上使用的是什么框架?
发布于 2015-10-20 09:03:53
伙计,对于你的特殊情况,你的原型和jquery与美元符号冲突,
只需执行以下操作:
<!-- Another way to put jQuery into no-conflict mode. -->
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
jQuery.noConflict();
jQuery( document ).ready(function( $ ) {
// You can use the locally-scoped $ in here as an alias to jQuery.
$( "div" ).hide();
});
// The $ variable in the global scope has the prototype.js meaning.
window.onload = function(){
var mainDiv = $( "main" );
}
</script>`
更新:伙计,如果你坚持使用框架,将没有保证的解决方案,唯一可能的方法是使用纯javascript,那就是香草js!
发布于 2015-10-20 09:48:43
首先,除非你有需要框架的复杂事情要做,否则最简单的可能是只使用document.querySelector()或document.querySelectorAll(),使用普通的Javascript,而不用担心框架。
如果你真的想要确定哪个框架存在,那么你可以为每个框架开发一个功能测试,并按照你关心的顺序对它们进行测试。
例如:
if (typeof jQuery !== "undefined") {
// jQuery present
} else if (typeof angular !== "undefined") {
// angular present
} else if (typeof Prototype !== "undefined") {
// Prototype present
} else if (typeof dojo !== "undefined") {
// dojo present
} else {
// don't see any framework
}根据你到底想做什么,每个框架也可能有更全面的测试。
仅供参考,当在不熟悉的页面中使用jQuery时,我建议使用jQuery作为根标识符,而不是jQuery(...)中的$,而不是$(...)。如果其他框架正在使用$,这将防止混淆。
https://stackoverflow.com/questions/33226236
复制相似问题