作者Hemiola ()
看板Browsers
标题Re: 刚刚测到一个 bug...
时间Tue Jul 21 16:24:45 2009
※ 引述《Kenqr (夏天的微笑)》之铭言:
: 剩1个warning无法修好 是因为iframe根本没有onload事件可以用
: (http://www.w3.org/TR/html401/present/frames.html#edef-IFRAME)
: 既然在iframe中使用onload本来就是错误的语法
1F:→ tyf99:iframe onload 非 W3C 标准我知道,但连 Joomla 官方都在用
2F:→ tyf99:触发改 height 也只有 onload 比较有效率,想避也避不开.
我没有实际测试,但这应该很容易改写成标准的作法。
iframe 的 onload 实际上没有意义,因为是 iframe 里的 document 被 load,
所以当然 onload 只会写在 body 里。
但在原 po 的例子里,如果事件的触发写在 iframe 里的 document,
是没办法改到原网页里的物件高度。
所以正确的写法是,在原网页的 body 里写 onload,
触发一个 javascript function,
然後 iframe 给一个 id 名称,
在 function 里用 document.getElementById 的方式抓到 iframe 後,
再去改 height。
目前想到的是这样。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.74.131
※ 编辑: Hemiola 来自: 123.193.74.131 (07/21 16:26)
※ 编辑: Hemiola 来自: 123.193.74.131 (07/21 16:27)
3F:→ tyf99:js 抓不到 iframe,应该说它根本不会知道有 iframe 的存在 07/21 18:33
4F:→ tyf99:document2 == document1.iframe.contentWindow.document 07/21 18:35
5F:→ tyf99:从 documnet2 不可能抓到 document1.iframe 07/21 18:36
6F:→ TonyQ:可以用 parent 啊 :p 你小看它了 07/21 20:20
用 document.defaultView.parent.document.getElementById 就可以了。
实作成果在此:
http://hemiolapei.free.fr/temp/test.html
不知道是不是你要的样子。
而我发现 Kenqr 做的虽然是用 <ifram onload...
但是也有同样的效果啊。
※ 编辑: Hemiola 来自: 123.193.74.131 (07/21 22:33)
7F:→ Hemiola:上面的做法,只有 fx 和 opera 是正常的 07/21 22:49
8F:→ ileadu:其实啊 我觉得改一改後 原本的两个hr横线 都变得只剩上横线 07/22 08:28
9F:→ tyf99:1. 很明显 fx,op 抓到的 page height 都错误. 07/22 11:40
10F:→ tyf99:2. WebKit 抓到正确的 height,但是只能小变大,不能大变小 07/22 11:41
11F:→ tyf99:3. Kenqr 的语法就是我原本的语法,仅是补上 dtd, title 07/22 11:45
12F:→ tyf99:我也很纳闷为什麽加上 dtd 後,原本的 page height 就跑掉了 07/22 11:48
13F:→ tyf99:是 W3C 定义的 dtd 有问题?还是 fx,op 解读 dtd 出问题? 07/22 11:49
14F:→ tyf99:我到现在还是不知道我有哪行程式是 ileadu 说的 ie only? 07/22 11:51
Firefox 和 Opera 才是对的。
因为 scrollHeight 不包含物件的 margin,
照你的程式码,你设 iframe 的 height 等於 页框 body 的 scrollHeight,
就会漏掉页框 body 的 margin,所以会看不到底下那条 hr。
※ 编辑: Hemiola 来自: 123.193.74.131 (07/22 12:10)