作者sk1765 (鼎玉铉)
看板Ajax
标题Re: [问题] 启动javascript的连结 via dom
时间Sun Sep 26 00:00:39 2010
※ 引述《wandog (慢跑中毒)》之铭言:
: 各位大大好
: 最近想要透过dom 来自动登入网页
: 和点选所要的联结 但是 遇到了一类似下面的联结
: <a href='javascript:openwnd("argument")' >连结至函数</a>
: 直接对他使用click这个方法 一点动作都没有
: 想请教大家都是怎麽处理的 另外 因为这个连结点了之後
: 会再产生另外一个视窗物件 那又要怎麽透过dom去存取这个物件呢?
这个问题要分成三个部分来了解
首先我们来分解a href的动作,a是一个连结的tag,href则是这个标记的一个属性,
标明他的联结位置href里面写的一段文字是一个通信协定(protocal),
通常是http://为开头的http协定
href这个属性会执行预设动作(default action),他的预设动作是
换页并载入新的网址页面(事实上我们不应称之为换页,这个属性的等价动作
完全相同於location.href="xxxxxx")
所以当我们在浏览器按一个a tag的link会发生什麽事
以下是他的流程:
a. 发生一个click事件 ,如果有click event handler,会执行处理函式
b. 执行预设动作location.href,也就是执行href属性後面那串文字的
如此一来当你要用click取代href时,必须在处理函式中的最後加上
location.href="xxxxxx")不管你是用传统模式写在分离的.js档案中
x.onclick = function() {
.........;
location.href="xxxxxx";
}
或是行内注册 <div onclick='.........;location.href="xxxxxx";'>aaa</div>
都必须在处理函式的最後加上location.href="xxxxxx";
所以依原文<a href='javascript:openwnd("argument")' >连结至函数</a>
这一列完全等价於
<div onclick='location.href="javascript:openwnd(\"argument\")";'>
连结至函数</div>
或是
<div id="test">连结至函数</div>
x = document.getElementById('test');
x.onclick = function() {
location.href="javascript:openwnd(\"argument\")";
}
click 是可以取代href的但是并不是写成
<div onclick='javascript:openwnd("argument")'>连结至函数</div>
因为click是一个event 并没有a tag的预设动作 a href是一个属性他才有预设动作
第二 我们来看看 javascript:所代表的意义
javascript: 是一个虚拟协定(pseudo-protocal)
在ppk on javascript(2-c节)一书的中译本中 把它翻做伪协定
所谓的虚拟协定表示他不是一个真正的通信协定
举例来说http:// , ftp:// 这些则是真正的协定
这也意味着在浏览器的网址列你也可以输入javascript:
因为他在浏览器看来也是一个协定
举例来说 在浏览器网址列打上 javascript:alert('good1');alert('good2');
浏览器会出来两个对话框good1,good2 没想到吧
javascript:xxxxxxxxx xxxxx所代表的文字完全可视为 eval('xxxxx');
也就是虽然是虚拟协定 但是他完全可以执行任何的javascript
xxxxxxx可以是任何javascript 甚至可以读取其他js档中的任何变数和函式
至於用<div onclick='location.href="javascript:openwnd(\"argument\")";'>
连结至函数</div>
代替是不是有不同呢 答案是还是有的
为什麽 因为在<a href="javascript:xxxxxxx">
其javascript执行的时机已经在预设动作的阶段
在这时候已经不能用return false;停止预设动作了 而且click的event早已发生过了
第三 我们来看看如何得到popup window 的dom
在 openwnd("argument") 这个函式中一定有用到
var newid = window.open('page.html');
所以newid指向新视窗 newid.document就是他的dom
你只需要再把这个newid变数传出函式即可利用 或是就直接用window.open吧
<div onclick='location.href="
javascript:var newid = window.open(\"page.html\");
mydom = newid.document;"'>连结至函数</div>
但是即便如此在VBA中是否能call url取回document 因为这部分并不了解
也许你可以把你的VBA程式贴上来研究一下
另外就算能call url ,VBA似乎也不能解译javascript
因为javascript: 是一个虚拟协定 要执行该协定的平台一定是能解译javascript的
例如浏览器便是 所以首要解决的是VBA如何取得一个简单的html网页的dom
先不要考虑popup window 如果可以的话 请把该部分VBA程式码贴上来以供参考
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.70.98.144
1F:→ TonyQ:真是有心的解释 推一个! 09/26 00:03
2F:推 chrisQQ:推这篇! 09/26 02:10
3F:推 s25g5d4:1F 说好的推呢XD 09/26 09:22