是否可以使用Javascript或其他技术来确定用户点击了哪个超链接,而无需更改超链接源代码。
例如: 您是否可以单击“标记”按钮,然后单击托管在不同iframe中的超链接,并能够计算用户单击的超链接,而无需更改该iframe中的任何源代码?
答案 0 :(得分:4)
使用jQuery,您可以设置选择的上下文。即
$('a',$('#iframe-id'))。click(function(){...});
然后,您可以实现一个处理iFrame超链接点击的事件处理程序。处理程序中的“this”属性允许您查询超链接并获取诸如innerText等属性。
答案 1 :(得分:1)
你需要在每个链接上放一个事件, 然后您将获得有关特定点击的所有信息。
这只适用于某些文档, 因此,如果您尝试在iframe内的链接和页面中的链接之间进行测试,则不会获得iframe链接的事件。
为了附加您需要在页面中的所有链接上运行的所有链接的事件, 最好的方法是通过jQuery选择器。或其他js框架,如YUI
$(“a”)。click(function(){ 警报('') });
getElementsByTagName(“a”) - 将为您提供页面中的所有链接。
答案 2 :(得分:0)
我只想到一个解决方案,这会有用,还是有其他选择?
解决方案是代理iframe soruce页面的内容,用代码替换href,调用一个javascript函数来识别点击了哪个href。
然后可以将其与标记点击结合使用以准确标记链接。
这也意味着原始来源,根本不需要改变。
答案 3 :(得分:0)
你需要什么? - )
如果你有一个iframe,你用作链接的目标,你必须做一些服务器端处理或添加一些东西到链接的URL,你可以在页面加载时读取...
但是检测页面加载的时间需要页面中的脚本,即iframe内部的脚本,或者需要在短时间间隔内测试iframe页面中元素可用性的函数...
- 但只有当页面来自与主页相同的域时才能成功,因为跨域脚本是非法的,因此是不可能的! -
答案 4 :(得分:0)
我认为这应该是可能的。可以从外部文档(嵌入iframe的页面)访问IFrame的内容,这样您就可以在iframe加载后在这些元素上添加事件处理程序(请参阅其他答案)。
另请参阅Wikipedia on Iframe,其中提供了一些实际上适用于IFrame内容的示例和框架。
答案 5 :(得分:0)
您可以将代码注入iframe,但仅当该iframe与您注入的网页位于同一个域时,出于明显的安全原因。
<iframe id="framedpage" src="framedpage.html"></iframe>
<button type="button" id="tagbutton">Tag</button>
<script type="text/javascript">
function framedclicks_bind() {
var f= document.getElementById('framedpage');
var fdoc= f.contentDocument;
if (!fdoc) fdoc= f.contentWindow.document; // for IE
if (fdoc)
for (var i= fdoc.links.length; i-->0;)
fdoc.links[i].onclick= framedclicks_click; // bind to all links
}
function framedclicks_click() {
alert('You clicked on '+this.href);
return false; // don't follow link
}
document.getElementById('tagbutton').onclick= framedclicks_bind;
</script>
可能希望根据应用程序的需要进行清理(例如,确保在尝试绑定之前始终加载框架,或者可以发生解除绑定,或者记住原始链接的任何onclicks),但是是一般事物的形状。
答案 6 :(得分:0)
找出点击了哪个元素的好方法是使用事件委派。如果使用循环(通过document.links或document.getElementsByTagName)将事件侦听器附加到每个元素,则会出现两个问题: - 浏览器有许多要维护的侦听器 - 当您调用循环时,事件仅附加到DOM中的元素;以后动态添加的任何元素都没有事件监听器。
事件委派的一个简单示例:
document.onclick = function(e){
e = e || window.event;
var t = e.target || e.srcElement;
if(t.nodeName=='A'){
alert( t.href );
}
}
如果您想在iframe中找到点击链接,只需使用iframe的contentDocument而不是文档。