![](/img/trans.png)
[英]Wicket - IE8 - Javascript event listeners arent executed, when tags are dynamically added over ajax
[英]Dynamically added javascript not executed in Safari & IE
我在执行动态加载并插入页面的JavaScript块时遇到麻烦。 这是已加载(简化)的代码:
<p>i am html-code</p>
<script type="text/javascript">
alert("i'm here");
</script>
这段代码是通过以下Mootools命令注入的:
new Element('div', {
'class': 'foo'+item_data[id].contenttype,
'id': '123',
'html': code
}).inject($('presentation'));
(变量代码包含第一个代码段。)
在Firefox中,这可行。 调用inject命令时,将显示该段落并执行javascript。 在IE和Safari中,仅显示该段落。
有什么提示可以在没有“评估”的情况下如何解决这个问题? 提前谢谢。
这是一篇很好的简短文章,介绍了一种处理方法。
潜在的问题是,默认情况下,IE和Safari在加载<SCRIPT> DOM节点后不会对其进行评估。 这可以说是一项安全功能。
解决该问题的基本技巧是您必须将其编写为一个函数,并将该函数设置为在onload事件中求值; 保证代码得到评估。
偷窃 按照本文的示例,代码看起来像
var script = document.createElement('script');
script.setAttribute('src','myjavascriptfile.js');
script.setAttribute('type','text/javascript');
var loaded = false;
var loadFunction = function()
{
if (loaded) return;
loaded=true;
// your code goes here
alert("I'm here!");
};
script.onload = loadFunction;
script.onreadystatechange = loadFunction;
更新 :
听起来您这里有几个变量。 尝试简化一点-而不是依赖MooTools,创建一个简单的基本HTML页面,然后将您的代码放入其中。
这是一个例子:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
<head>
<meta http-equiv='content-type' content='text/html; charset=utf-8' />
<title>Trial</title>
<meta name='generator' content='BBEdit 9.6' />
<script type="text/javascript">
//<![CDATA[
var script = document.createElement('script');
script.setAttribute('src','myjavascriptfile.js');
script.setAttribute('type','text/javascript');
var loaded = false;
var loadFunction = function(){
if (loaded) return;
loaded=true;
// your code goes here
alert("I'm here!");
};
script.onload = loadFunction;
script.onreadystatechange = loadFunction;
//]]>
</script>
</head>
<body>
</body>
</html>
那是干净的Tidy版本代码,应该可以在大多数神经质的可接受浏览器以及IE上运行。 假设您有一个javascript源文件要作为myjavascriptfile.js
加载,它应该可以工作。
然后,我建议将其用作myjavascriptfile.js
开头:
// myjavascriptfile.jx
alert("My java script has loaded YAY!!");
我知道这是4年后的事,但是最近我遇到了同样的问题。
回到两个Mootools版本(3.x,4.x和5.x),addEvent使用以下方法为我工作:
new Element('script', {
src: 'myscript.js',
async: true
}).addEvent('load', myFunc).inject(document.getElement('body'), 'top');
我发现的一件事是脚本加载与其内容执行之间存在延迟。
您可以在onLoad方法中添加延迟,或者在已加载的JS中触发平均,然后监听该延迟:
window.addEvent('myscripEvent', myFunc);
new Element('script', {
src: 'myscript.js',
async: true
}).inject(document.getElement('body'), 'top');
然后在myscript.js中:
/* my code here */
window.fireEvent('myscripEvent');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.