innerHTML在正文中插入脚本(用于ZeroClipboard)不起作用
innerHTML to insert script in body (for ZeroClipboard) not working
我正在使用AJAX构建<div>
元素,我想添加ZeroClipboard功能。Firebug显示代码构建正确,当我将其复制到原始HTML测试页面时,它也能正常工作。构建不是在加载时进行的,而是在轨道上进行的。
代码如下,调用一些创建新元素的函数:
dom_append_child_with_onclick ("img",export_id,"icon_active",report_heading_id, "event.cancelBubble = true;");
dom_append_child ("div",export_script_id,"",report_heading_id);
text = "<script language='JavaScript'>var clip" +rnum +"=new ZeroClipboard.Client();clip"+rnum+".setText('');clip"+rnum+".addEventListener('mouseDown',function(client){alert('firing');clip"+rnum+".setText(document.getElementById('SL40').value);});clip"+rnum+".glue('XR"+rnum+"','RH"+rnum+"');</script>";
document.getElementById(export_script_id).innerHTML=text;
我的问题是:当你在<body>
中插入一个脚本时,你是否必须做一些事情才能启动它?脚本似乎没有发挥作用,我无法显示警报"开火"。
注意:cancelBubble是为了停止底层元素的onClick函数。如果我能让闪光灯工作,那可能就没必要了。
谢谢。
您可以将脚本作为DOM对象注入页面,但这并不适用于所有浏览器:
var s = document.createElement("script");
s.type = "text/javascript";
s.innerText = "var clip" +rnum +"=new ZeroClipboard.Client();clip"+rnum+".setText('');clip"+rnum+".addEventListener('mouseDown',function(client){alert('firing');clip"+rnum+".setText(document.getElementById('SL40').value);});clip"+rnum+".glue('XR"+rnum+"','RH"+rnum+"');";
document.getElementsByTagName("head")[0].appendChild(s);
或者,为了更好的兼容性,您可能只想在页面中声明一个设置此功能的函数,然后只调用以rnum
为参数的函数。
例如
function useZeroClipboard(rnum) {
window["clip" + rnum] = new ZeroClipboard.Client();
cwindow["clip" + rnum].setText('');
window["clip" + rnum].addEventListener('mouseDown', function(client){
alert('firing');
window["clip" + rnum].setText(document.getElementById('SL40').value);
});
window["clip" + rnum].glue('XR"+rnum+"','RH"+rnum+"');
}
然后你可以在你的代码中称之为:
useZeroClipboard(rnum);
而不是编写脚本块。
这里有一个方法,可以递归地用可执行的脚本替换所有脚本:
function replaceScriptsRecurse(node) {
if ( nodeScriptIs(node) ) {
var script = document.createElement("script");
script.text = node.innerHTML;
node.parentNode.replaceChild(script, node);
}
else {
var i = 0;
var children = node.childNodes;
while ( i < children.length) {
replaceScriptsRecurse( children[i] );
i++;
}
}
return node;
}
function nodeScriptIs(node) {
return node.getAttribute && node.getAttribute("type") == "text/javascript";
}
相关文章:
- 将函数的上下文应用于javascript变量
- keyup事件处理程序更改焦点不适用于快速键入
- ZeroClipboard-在复制之前添加到值
- JQueryhide()不适用于Mozzilla,但适用于Chrome
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- PHP中的setcookie仅适用于localhost
- 包括用于facebook评论框的JavaScript SDK
- 如何检测用于WebGL的专用或集成显卡
- ng更改事件不适用于Dropdown
- 用于搜索的聚合物嵌套绑定
- jQuery表单添加不适用于下拉列表
- Rails/JSON:如何将JSON用于jquery UI自动完成表单
- JS编译器/包管理器,用于版本控制
- 将CSS应用于printWindow.print();在Javascript中
- 用于'魔术串'属性
- 用于检查数组中是否存在元素的javascript自定义方法
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 在ajax成功后,cluetip不适用于首次点击活动元素
- innerHTML在正文中插入脚本(用于ZeroClipboard)不起作用
- 用于在ASP.NET MVC中复制到剪贴板的ZeroClipboard