2008-10-29 96 views
2

svg是一个基于xml的图形,你可以添加JavaScripts到它。我试图访问svg中定义的脚本函数。在我的SVG的脚本是这样的:访问svg的脚本

<svg ... onload="RunScript(evt);"...> 
<script type="text/javascript"> 
... 
function RunScript(loadEvent) { 
    // Get object in my html by id 
    var objElement = top.document.getElementById('objid1'); 
    if (objElement) 
    { 
    // Extend object tag object's methods 
    objElement.SVGsetDimension = setDimension; 
    ... 
    } 
    function setDimention(w, h) {...} 

在我的主HTML文件中,SVG嵌入在一个对象标签是这样的:

<object id="objid1" data="mygrahic.svg" ... > 
<a href="#" onclick="document.getElementById('objid1').SVGsetDimention(10, 10); 
    return false;" 
...>Set new dimention</a>... 

这一个工作正常。但是,如果SVG XML文件是由一个完整的URL(在其他网站上)引用这样的:

<object id="objid1" data="http://www.artlibrary.net/myaccount/mygrahic.svg" ... > 

代码不工作了。它看起来像我不能将我的svg脚本中定义的方法附加到我的主html对象标记元素中的方法,或者顶部或文档在这种情况下不可用,或getElementById(..)只是无法找到我的对象元素我的svg脚本。有没有什么办法可以在svg xml脚本中找到我的html元素?

不确定此问题是否由不同的DOM引起,并且我的svg脚本代码无法找出另一个DOM的对象或元素。如果有任何解决方案,这将是很好的。

+0

您定位和测试哪些浏览器?如果这些浏览器没有内置的SVG支持,那么您的SVG插件正在使用? – 2008-10-29 17:20:28

回答

4

我认为线索可能在'在另一个网站上'。关于何时允许来自不同站点的JavaScript程序与其他教程进行通信有严格规定。嵌入式SVG的处理方式与iframe中的文档的处理方式相同。

1

pdc有这个权利。浏览器努力防止跨站点脚本攻击(XSS),这是结果。您不能在从另一个域加载的文档中执行脚本,也不能使用其他端口或协议执行脚本。欲了解更多信息,你可以看到:http://en.wikipedia.org/wiki/Same_origin_policy

2

所以,你在做什么,从浏览器的角度来看,等同于以下:

<script> 
function stealPassword() { 
    var passwordInput = document.querySelector('input[type="password"]'); 
    var value = passwordInput.value; // My password! 
    sendPasswordToServerToStealMyMoney(value); 
} 
</script> 
<iframe src=mybank.com onload=stealPassword()></iframe> 

我想你会明白为什么这个是不可取的。 (尽管你的错误控制台中可能有警告或异常。)

0

从我的经验来看, 您的代码是真实的,以便正确运行。 我的电脑Windows 7,IE9安装了Adobe Viewer。 除SVG Viewer外,IE9 SVG都画不过,但不能运行SVG TAG动画, 只能运行Javascript动画。 因此,在Windows XP,IE8下,安装了Adobe SVG Viewer,结果相同(正好运行)。

Firefox SVG无法在我的电脑下运行(SVG ecmascript动画)。