0

我试图将 JS 处理程序添加到我的一些 SVG 的孩子。我在 SVG 中使用以下代码:

  <script type="text/javascript" id="script3079">
    addClickEvents();

    function addClickEvents() {
        var keys = document.getElementsByTagName('path');
        for (var i=0; i &lt; keys.length; i++){
            keys[i].addEventListener('click', keyClicked);
        }
    }

    function keyClicked(e) {
        var node = e.target;
        alert(node.id);
    }
  </script>

它工作正常。但现在我想从外部 javascript 文件中调用函数:

//myfile.js
function keyClickedExternal(e) {
  alert('keyClickedExternal');
}

当然,它是通过script标签附加到我的 HTML 的。

我尝试了以下绑定:

keys[i].addEventListener('click', keyClickedExternal); //keyClickedExternal undefined
keys[i].addEventListener('click', parent.keyClickedExternal); //keyClickedExternal undefined
keys[i].addEventListener('click', top.keyClickedExternal); //keyClickedExternal undefined
keys[i].addEventListener('click', parent.keyClickedExternal); //keyClickedExternal undefined

我检查了 DOM:

parent.window.document //access violation
window.document //refers to SVG document
document //the same as previous

最后,我不明白如何将外部处理程序绑定到 SVG 子项。

4

2 回答 2

1

正如@Robert Longson 所说,问题与 Chrome 的安全性有关——它将其他本地文件视为不同的域。使用网络服务器,Luk。

于 2013-02-10T12:06:07.890 回答
0

您应该document.domain = 'Your_domain_name'; 在每个 JavaScript 文件的开始行添加,我还建议阅读有关从不同域名运行脚本的 crossdomain.xml 文件(例如:statics.yourdomain.com,包括静态 css、js、img 文件)

PS:抱歉回复晚了,我在找别的东西,看到你的问题仍然没有回复

于 2017-06-16T00:55:32.557 回答