2

svg 是基于 xml 的图形,您可以向其中添加 JavaScript。我试图访问 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 的对象或元素。如果有任何解决方案会很好。

4

4 回答 4

4

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

于 2008-10-29T18:09:30.000 回答
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>

我想你会明白为什么这是不可取的。(不过,您的错误控制台中可能应该有警告或异常。)

于 2010-08-18T08:05:12.520 回答
1

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

于 2008-10-29T19:53:29.213 回答
0

根据我的经验;您的代码是正确的,因此可以准确运行。我的电脑 Windows 7,IE9,安装了 Adob​​e Viewer。两者都除非SVG Viewer,IE9 SVG绘制,但不能运行SVG TAG Animation,只能运行Javascript Animation。因此,在 Windows XP、IE8 下,安装 Adob​​e SVG Viewer,结果相同(完全运行)。

Firefox SVG 不能完全在我的电脑下运行(SVG ecmascript 动画)。

于 2011-11-04T02:53:20.377 回答