在3.2之前,我可以将菜单项类型设置为“外部链接”,然后将链接设置为
"javascript:myFunction()“
单击时,菜单项将调用JavaScript函数。但是在我升级到3.2之后,当我做同样的事情并试图保存菜单项时,菜单项上写着“保存不允许”。
3.2阻止了这种使用吗?如果是,如何让菜单项执行我的JS函数?
发布于 2014-02-04 13:19:35
不久前,我在Joomla版本3.2.1中提到了这个问题,它是关于Skype链接的。
skype:我的名字
这与该文件中允许并定义的协议类型有关:
/administrator/components/com_menus/controllers/item.php,线~180.
有一个数组定义了可接受的方案:
$scheme = array('http', 'https', 'ftp', 'ftps', 'gopher', 'mailto', 'news', 'prospero', 'telnet', 'rlogin', 'tn3270', 'wais', 'url', 'mid', 'cid', 'nntp', 'tel', 'urn', 'ldap', 'file', 'fax', 'modem', 'git');当在列表末尾添加skype时,Joomla!允许保存外部链接。javascript也是如此。在任何情况下,您都应该考虑与此解决方案相关的任何安全风险。
此外,您应该记住,在joomla的任何未来更新中,都可能放弃此覆盖。
发布于 2013-12-04 13:20:20
从技术上讲,Joomla认为javascript是一个协议,就像HTTP&Co.一样,它在已知协议列表中查找它,它找不到它,它会抛出一个错误。
开始在[MenusControllerItem::save()][1]内部的环线阅读。基本上,这与你试图使用一些JavaScript无关,,这只是一个副作用。。
虽然在外部链接中使用JavaScript并不是一个宣传的特性,而是一个漏洞,但是如果您以前使用过它,它确实会破坏b/c。
你可以:
- Instead of link put #
- Set the field "Link CSS Style" to something that does not colide with other classes, eg. `my-function`
- Save
- You can use jQuery to intercept the click event on the link and to make it run your function. See code below:jQuery(Document).ready(函数($){ // Select基于Joomla后端$(“..my function”).on(单击,函数(E){ //不跟随链接e.preventDefault();//调用函数myFunction(1);});});函数myFunction(x) {警告(“i被称为”+ x);}
Update:在与变更提交人进行简短讨论后,我了解到这可能与安全问题有关。因此,它可能是故意的,毕竟不允许js。
https://stackoverflow.com/questions/20313017
复制相似问题