2012-06-12 62 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