我试图在点击iframe中的按钮后评估一些javascript。该按钮是一个链接,javascript在该链接的href中进行评估。在href中评估js不是我的选择,但我没有访问任何其他属性,因为它是SSRS报告。
但是,似乎没有在iframe按钮的范围内定义环境变量,没有console
没有document
甚至self
。
当我直接打开iframe报告而不是iframe内部时,按钮js的范围包括所有重要的环境变量。
我附上了按钮的代码。
<a tabindex="1" href="javascript:eval%20(%20%20%20%20%20unescape%20%20%20%20%20('self')%20)" style="text-decoration:none;" target="_top"><img onload="this.fitproportional=true;this.pv=0;this.ph=0;" src="/ReportServer/Reserved.ReportViewerWebControl.axd?ExecutionID=cgj2rc55ffw43k45lk0yk055&Culture=2057&CultureOverrides=False&UICulture=9&UICultureOverrides=False&ReportStack=1&ControlID=faa6cce17cd640bf8ebe1f6af602c84b&OpType=ReportImage&IterationId=62c2cb36498248bf8b8b9e784a09d4b8&StreamID=68b4d5bd-b6bf-4d8a-8ad4-b254b9e67c56" border="0" height="35" width="93"></a>
请记住,它位于iframe中,只会出现问题。以上生成
uncaught exception: ReferenceError: self is not defined
答案 0 :(得分:1)
如果出现以下情况,则会出现此行为:
<a>
标记所在的子帧与顶部窗口不同。在这种情况下,由于链接定位_top
,因此脚本无法在该顶层窗口中运行(这将是同源策略违规)。因此,它会在沙盒中运行,沙盒中没有任何类型的DOM对象,但具有标准的JavaScript对象(Array
,Object
等等。)
在较新的Firefox版本中,脚本在这种情况下根本无法运行,因此您无法获得未捕获的异常,但它也不会做任何事情。