2012-09-27 46 views
0

當scipt2被調用時,我想傳遞值(用戶名)。 script1獨立,但在script1之後,所以在script1的值已填充但需要它是持久性的以供未來的腳本調用使用。從另一個javascript獲取值

script1.js

var user = ""; 
function method1(){ 

    var username = document.getElementById('username').value; 
    var app = new UserText(); 
    app.setValue(username); 
    // more logic 
    } 
function UserText(){ 

    this.getValue = function(){ 
     return this.user; 
    }; 

    this.setValue = function(val){ 
     this.user = val; 
    }; 
} 

Script2.js

alert(UserText.getValue()); 
+0

腳本是否有共享的上下文(例如Web應用程序)? –

+0

是的,他們是同一個應用程序的一部分,但是被獨立調用。它是一個FF插件(xul) – user1579906

回答

1

你將不得不暴露一些東西到全球範圍。現在,當您撥打method1()時,用戶名將被存儲在UserText的特定實例中。該特定實例由您的變量app表示,該變量當前僅限於method1()函數。

解決此問題的一種方法是簡單地將app的聲明移至全局範圍。換句話說,腳本的第一部分更改爲以下:

var user = ""; 
var app; 
function method1() { 
    var username = document.getElementById('username').value; 
    app = new UserText(); 
    app.setValue(username); 
    // more logic 
} 

注意,我提出var app聲明全局範圍。現在,您可以通過

alert(app.getValue()); 

與您的用戶價值訪問實例與此相關的,你應該知道你的var user = "";線無助的時刻,至少你已經呈現在我們面前的代碼。當您在UserText類中讀取並寫入this.user時,它會使用該類的實例來存儲信息,這就是爲什麼您會在app.user屬性中找到您的值而不僅僅是user變量。

+0

script2在執行時沒有返回值而是去了異常(catch)塊...解決方案沒有工作...注意script2.js在script1(modal xul)之後被激怒,並被另一個xul(父母)獨立激活。有沒有辦法拯救全球價值?甚至嘗試了Application.storage.set(keyname,data);來自https://developer.mozilla.org/en-US/docs/Working_with_windows_in_chrome_code – user1579906

+0

你沒有提到這些是你的問題中單獨的XULs!此外,你沒有說出異常是什麼,但我會猜測這是應用程序未定義的參考錯誤。如果模式XUL由父XUL打開,那麼您應該可以使用'window.opener'屬性來訪問第一個XUL的全局範圍。所以你可以嘗試改變「script2」來讓alert(opener.app.getValue());假設「script1」仍然在全局空間中聲明'app',就像我在我的答案中所做的那樣。 –

+0

抱歉不清楚...父XUL觸發script2.js,modal-xul(用於驗證和捕獲用戶名)在script1.js後完成。所以問題是什麼時候script2.js觸發,它是如何獲得在應用程序中設置的值 – user1579906