2012-06-12 61 views
0

我得到了不同的JavaScript文件和网站的框架。在generalJavascript.js我写这变量和框架的JavaScript范围

console.log("BP0 - generalJavaScript.js eingebungen;"); 
top.window.clickedNewForm = false; 
function setClickedNewForm(booleanobj){ 
    console.log("BP5 - setClickedNewForm(); top.window.clickedNewForm: " + top.window.clickedNewForm + ";"); 
    top.window.clickedNewForm = booleanobj; 
    console.log("BP6 - top.window.clickedNewForm: " + top.window.clickedNewForm + ";"); 
} 
function getClickedNewForm(){ 
    console.log("BP7 - getClickedNewForm();"); 
    return top.window.clickedNewForm; 
} 

在Firefox的控制台,我可以看到的消息是这样的:

Permission denied to access property 'clickedNewForm' 
generalJavaScript.js()genera...ript.js (Zeile 11) 
[Bei diesem Fehler anhalten]  
top.window.clickedNewForm = false; 

有什么不对?我想如果我宣布顶级对象上的全局变量,它将可以从所有框架访问?!

UPDATE:试图用parent.myvar代替top.window,遗憾的是没有什么变化,FF-控制台:

BP0 - generalJavaScript.js eingebungen; 
genera...ript.js (Zeile 10) 
Permission denied to access property 'clickedNewForm' 
generalJavaScript.js()genera...ript.js (Zeile 12) 
[Bei diesem Fehler anhalten]  
parent.clickedNewForm = false; 
+0

您的所有帧是否都来自同一个域(完全相同的域,包括协议)?如果浏览器的同源策略不能阻止访问这些变量。 – njr101

+0

是的,似乎SOP是问题。 – Jochen

回答

1

您需要使用父对象访问值的从父框架。

console.log("BP0 - generalJavaScript.js eingebungen;"); 
parent.clickedNewForm = false; 
function setClickedNewForm(booleanobj){ 
    console.log("BP5 - setClickedNewForm(); parent.clickedNewForm: " + parent.clickedNewForm + ";"); 
    parent.clickedNewForm = booleanobj; 
    console.log("BP6 - parent.clickedNewForm: " + parent.clickedNewForm + ";"); 
} 
function getClickedNewForm(){ 
    console.log("BP7 - getClickedNewForm();"); 
    return parent.clickedNewForm; 
} 
+0

仍然一样...请参阅更新。 属... ript.js(Zeile 12) BP0 - generalJavaScript.js eingebungen; – Jochen

+0

那么,确保你没有跨域脚本我会说。我一直使用这些访问器来发布二进制表单,并在处理到父框架时接收回来。如果您使用跨网域(例如,从domain.com访问的myscripts.domain.com将失败) – Tschallacka