以下是该方案。在其他网站的iframe中加载了内容。我点击了iframe中的一些链接。
是否有可能以某种方式捕获iframe之外的链接?
UPDATE 既然我收到了问题,如果我的意图是纯粹的,我会更多地解释用例。可能是我从错误的方向开始这项任务。
因此,我们有一个桌面客户端,可以在网上走动(实际购物),当客户找到她想要购买的东西时,她点击“那个”(任何东西 - 图片,链接,地址)并发送“那个”到我们的服务,人工解析链接到产品并转换为注册表中的条目。没什么不寻常的。
现在,任务是使其成为网络应用程序。因此,客户在我们的网站上注册并开始浏览互联网商店。因此我的第一选择是iframe。但问题是如何找到她点击的内容?
或者,通常 - 如何将“书签”保存到其他网站的某个对象?
答案 0 :(得分:5)
如果页面不在同一个域中,则无法执行此操作。您的脚本无法跨域查看。
答案 1 :(得分:1)
如果是来自其他网站,那么我所知道的唯一方法就是将所需信息写入iframe的window.name属性。
,您可以从主要文档中读取。
答案 2 :(得分:1)
你可以尝试不可见的div点击技术,你可以在iframe上有一个div ontop,并在它们悬停在它上面时在hide上注册一个点击服务器端。
答案 3 :(得分:0)
如果您的iframe位于同一个域中,则只需在链接的onclick事件中添加事件侦听器即可。
示例:
<a href="javascript:void(0)" onclick="top.harvestLink(this)" title="Item=foo" alt="">Foo</a>
然后在托管iframe的页面中,你有你的处理程序:
function harvestLink(anAnchor,aShoppingListArray) {
var itemName = anAnchor.title.split("=")[1];
aShoppingList.push({item:itemName,dateStamp:new Date()});
}
这是一个简单的例子,说明了原理。您可能希望向title标记添加其他信息,在这种情况下,您将以不同方式进行解析,并且您可能希望使用与“title”不同的属性来存储它。您可以自己做家务。它也可以用按钮元素而不是锚标签来完成(更容易,IMO),但一定要将按钮的type属性设置为“按钮”,否则IE将提交表单。
答案 4 :(得分:0)
实际上没有办法做到这一点。如果没有被访问网站的合作,上述回答者指出的window.name
传输将无法运行。除非父母和孩子在同一个域中,否则无法访问window.name
。
我最近解决了这个问题,方法是在孩子中设置window.name
,然后重定向到父母域的404页面。突然,父框架可以读取iframeID.contentWindow.name
值并获取信息。但是重定向是由我在iframe中的页面完成的。
我见过的这种跨域,跨帧通信的每个场景都是程序员控制子帧或父帧和子帧的时间。只有控制父母才能被我找到的每个浏览器锁定。
答案 5 :(得分:0)
某些网站所做的一种方法是创建一个书签。用户会定期浏览,然后如果他们找到了想要通过Web应用程序添加为书签的网站,他们只需点击书签即可。
小书签是一个javascript函数,可能会显示一个模态对话框窗口,然后可以远程访问您网站的书签功能。
例如,Facebook's Share Bookmarklet,任意数量的Delicious bookmarklet。
然后,您的Web应用程序将提供一种方法来组织人们使用您的书签保存的书签。您还可以查看Firefox插件,但bookmarklet是一种更加跨浏览器友好的解决方案。