2014-01-15 272 views
3

首先,我知道這個主題尚未在StackOverflow中,但我沒有完全理解它是如何工作的,完全讀取現有的答案。所以,我很抱歉,我希望現在明白。在HTML頁面之間共享變量

我不知道我的appoach是不正確的,爲什麼它不正確。

我有一個HTML頁面,就像其他幾個人的「遮陽板」,所以從這個「主」頁面,我可以看到其他人將它們嵌入到遮陽板頁面(帶有iframe)的區域。

同時,我爲所有頁面(包括遮陽板)都有一個共同的.js文件。例如,如果我有一個在.js中用「hello world」(字符串類型)的valor聲明的變量,我可以從visor或嵌入式頁面訪問這個變量,並且仍然具有其原始的勇氣。但是如果我從遮陽板(或嵌入式)改變它的勇氣,另一頁無法讀取從另一頁改變的新勇氣。

它可能使一個全局的頁面變量?

我嘗試使用localStorage,但它只適用於使用它的特定頁面。

那麼,讓我們來看看,或多或少:

.js文件

var Example = "Hello world"; 

function TellMe() 
{ 
    alert(Example); 
} 

function ChangeVar() 
{ 
    Example = "Goodbye world"; 
} 

PAGE 1(在頭部部分中引用.js文件,當然)

<div onclick="ChangeVar();">click!</div> 

PAGE 2(引用.js文件中的頭部分,當然),但在第1頁的DIV已經被點擊

<div onclick="TellMe();">click!</div> 

這將提醒的「Hello World」,在地方「再見世界」。

所以我明白每個頁面都有它自己的.js變量版本,即使所有的使用相同的.js,甚至當一個html被另一個html(嵌入iframe)訪問時。

我怎樣才能得到這個例子結果在點擊第2頁的div與消息「再見世界」?


我會更具說明性,看到大量的答案告訴黑客,浪費其他網頁和充值銀行賬戶。

這只是一個文檔頁面(來自一個軟件),我有一個「遮陽」頁面,從它可以訪問其他頁面。其實我在根文件夾中有「visor」頁面,其他頁面在這個根目錄下的一個文件夾中,都在同一個域中,不是嗎?

我想要頁面上的「下一頁」和「上一頁」按鈕,以避免用戶返回到遮陽板並選擇新頁面,但我需要知道用戶正在觀看的頁面的編號,下一個或previus。

+0

你對這個問題的標籤(「頁面之間的html變量」)的選擇不太可能幫助你。但是,「html變量」可能就足夠了。 (也就是說「之間」不是一個好主題名稱。) – Richard

+0

好吧,理查德,謝謝你的提問。 – Reaversword

+0

[localStorage](http://www.dummies.com/how-to/content/html5-and-local-storage.html)*可以*保留在多個頁面上(如果它不起作用,那麼你正在做它錯了):「*來自你的域的所有頁面共享相同的存儲區域,所以你可以使用這種機制來保持數據在多個頁面之間的持久性。*數據也停留在客戶端機器上(直到你刪除它),所以它可以用來隨時跟蹤信息。「 – user2864740

回答

0

這裏的問題是與Javascript有關的安全問題。

即使執行簡單事件,如jQuery .load(),由於CORS問題,頁面上的其他腳本也不會加載。

Variables在頁面之間不可傳遞,特別是在iframes之間,因爲可能會有各種各樣的惡意活動在進行。

我的建議是在每個iframe中加載相同的JS文檔(如果您能夠這樣做的話)。

您將無法將loadjs文件導入到不在您網域上的網站。

+0

什麼是阻止我注入一個JS文件,這將使我的銀行帳戶餘額$ 1,000,000? ;-) –

+0

我有根目錄和一個文件夾上的頁面,這將成爲讓localStorage工作的障礙嗎? – Reaversword

+0

我看不到任何理由:-)只要一切都是本地的,請查看[此鏈接瞭解更多](http://diveintohtml5.info/storage.html)以瞭解更多信息。 –

5

我與大家分享了本地存儲應該解決您的需求的非常簡單的示例。 考慮你有兩個文件page1.html和page2.html。

內page1.html的添加以下行

<div id="notes"> 
</div> 

<script> 
if(typeof(Storage)!=="undefined") 
    { 
    localStorage.lastname="Smith"; 
    document.getElementById("notes").innerHTML="Last name: " + localStorage.lastname; 
    } 
else 
    { 
    document.getElementById("notes").innerHTML="Sorry, your browser does not support web storage..."; 
    } 
</script> 

內page2.html

<div id="notes"> 
</div> 

<script> 
if(typeof(Storage)!=="undefined" && localStorage.lastname) 
    { 
    document.getElementById("notes").innerHTML="Last name: " + localStorage.lastname; 
    } 
else 
    { 
    document.getElementById("notes").innerHTML="Sorry, your browser does not support web storage..."; 
    } 
</script> 

您可以從localStorage的任意頁面訪問現值。

另一個選項

您可以從一個頁面通過查詢字符串參數值傳遞給另一個。 例如。 <a href='page2.html?index=someValue'>goto next page</a> 現在在page2.html中,您可以獲取此索引值並通過javascript設置所需字段。

希望能回答您的查詢。

0

是的,基本上,你們都是對的。

只需在localStorage.variableToManipulate中存儲要在頁面之間操作的變量就足夠了。直接如果我們想要。

左右就夠了喜歡的東西(我會重複我的修正第一個例子):

。JS文件

var localStorage.Example = "Hello world"; 

function TellMe() 
{ 
    alert(localStorage.Example); 
} 

function ChangeVar() 
{ 
    localStorage.Example = "Goodbye world"; 
} 

PAGE 1(與頭部部分中引用js文件,當然)

<div onclick="ChangeVar();">click!</div> 

PAGE 2(是.js在頭部文件引用,當然),但後第1頁的DIV已經被點擊

<div onclick="TellMe();">click!</div> 

,但只是一件事,當你做這種測試,記得打開了只有一個HTML頁面。我正在測試打開的兩個(Visor和PageN),我認爲每個人都使用自己的localStorage變量實例(由自己的頁面本身修改)。

只是一個菜鳥愚蠢的錯誤!我很抱歉,非常感謝你在那裏借錢!