use*_*778 10 javascript google-chrome-extension
我需要编写将所有href链接从网页放入数组的代码.这是我到目前为止所拥有的:
var array = [];
var links = document.links;
for(var i=0; i<links.length; i++) {
array.push(links[i].href);
}
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于Gmail的收件箱这样的网页,因为部分链接位于iframe内.我怎样才能获得所有链接,包括iframe内的链接?
此外,这是谷歌Chrome扩展.在清单中,我将all_frames设置为true - 这会有所不同吗?
谢谢
Dmi*_*nov 15
有一点需要记住
是对DOM对象的实时查询,因此在forLoops中它可能会显着减慢执行速度(因为i <links.length是每个循环的查询),如果你像这样检查数组长度:
var array = [];
var links = document.getElementsByTagName("a");
for(var i=0; i<links.length; i++) {
array.push(links[i].href);
}
Run Code Online (Sandbox Code Playgroud)
相反,你最好这样做:
var array = [];
var links = document.getElementsByTagName("a");
for(var i=0, max=links.length; i<max; i++) {
array.push(links[i].href);
}
Run Code Online (Sandbox Code Playgroud)
小智 8
当然,你的代码开始时会得到'arr未定义'吗?
var array = [];
var links = document.links;
for(var i=0; i<links.length; i++) {
arr.push(links[i].href);
}
Run Code Online (Sandbox Code Playgroud)
尝试:
var array = [];
var links = document.getElementsByTagName("a");
for(var i=0; i<links.length; i++) {
array.push(links[i].href);
}
Run Code Online (Sandbox Code Playgroud)
我有一个方法用于访问IFrame中的数据.答案从来没有写下来阅读和使用,这是多么有趣:P.随意修改和滥用:
public HtmlElementCollection GetIFrameElements(String tmpTag, int Frame)
{
HtmlElementCollection tmpCollection = mWebBrowser.Document.Window.Frames[Frame].Document.Body.GetElementsByTagName(tmpTag);
return tmpCollection;
}
Run Code Online (Sandbox Code Playgroud)
然后我用它来寻找我之后的任何元素:
foreach (HtmlElement el in GetElements("input"))
{
if (el.GetAttribute("id").Equals("hasNoGoogleAccount"))
{
el.InvokeMember("click");
}
}
Run Code Online (Sandbox Code Playgroud)
您可以随时更改方法以循环并获取所有iFrame等等等等等,但这应该足以让您感动.给我评分!我是新来的