2012-07-21 119 views
0

我想要使用JavaScript更新遠程URL的最後日期。我目前想出了這個:使用javascript獲取遠程URL的最後修改日期

function getlastmod(url) 
{ 
    var ifrm = document.createElement("IFRAME"); 
    ifrm.setAttribute("src", url); 
    ifrm.setAttribute("id", "oIFRAME"); 
    ifrm.style.display = "none"; 
    var spanTag = document.createElement("span"); 
    spanTag.id = "oSpan"; 
    try 
    { 
     var oIFrame = document.getElementById("oIFrame"); 
     var oSpan = document.getElementById("oSpan"); 
     oSpan.innerHTML = oIFrame.src + " last modified " + 
     oIFrame.document.lastModified; 
     outUpdate=oSpan; 
    } 
    catch(E) {setTimeout("getlastmod();",50);} 
} 

但是,這段代碼似乎總是將'outUpdate'更改爲「undefined」。代碼應該將url內容加載到一個框架中,然後使用document.lastModified函數獲取最後修改的日期。

有關如何解決此問題的任何想法?

謝謝! Josh

+0

outUpdate是什麼變量?它是全球性的還是你打算通過這個功能返回它? – 2012-07-21 13:32:53

+0

@GrzegorzKaczan它是一個全局變量,稍後會用到。 – Josh 2012-07-21 13:38:01

回答

1

將它們添加到您的文檔之前,您正在訪問的元素oIFRAME & oSpan,你有try塊之前,這兩條線加:

document.body.appendChild(ifrm); 
document.body.appendChild(spanTag); 

您的iFrame的ID是oIFRAME而不是oIFrame,請替換此行:

var oIFrame = document.getElementById("oIFrame"); 

通過

var oIFrame = document.getElementById("oIFRAME"); 

document是不是你iFrame對象的屬性,contentDocument是。通過

oIFrame.contentDocument.lastModified; 
+0

感謝您的描述性回覆!我已經相應地更改了代碼,但是outUpdate現在取得了「[object HTMLSpanElement]」的值[ ]我需要它來獲取修改日期的值? – Josh 2012-07-21 13:51:05

+1

你必須用'outUpdate = oSpan.textContent'或'outUpdate = oSpan.innerHTML'替換'outUpdate = oSpan'。 – mabbas 2012-07-21 13:54:30

+0

謝謝!但是,它似乎是返回確切的當前日期和時間,而不是修改日期? – Josh 2012-07-21 14:00:55

1

爲什麼在try catch語句中?你期望它會拋出任何錯誤嗎?因爲你基本上依靠那個。你是否爲outUpdate設置了初始值?它是否曾經進入捕獲聲明? 爲什麼你必須在這裏函數getlastmod()和getLastModified()? 當你將它設置爲會發生什麼:

var outUpdate = "init"; 
... 

... 
getlastmod("/"); 
console.log("outUpdate is: ", outUpdate); 
0

如果你不打算顯示的頁面,你可以通過使用XHR節省自己的一些帶寬替換該行

oIFrame.document.lastModified; 


這裏的東西,讓你去...

manifest.json的

{ 
    "name": "Get last modified header with XHR.", 
    "version": "1.0", 
    "permissions": [ 
    "tabs", "<all_urls>" 
    ], 
    "browser_action": { 
     "default_title": "Get last modified header with XHR.", 
     "default_icon": "icon.png", 
     "default_popup": "popup.html" 
    }, 
    "manifest_version" : 2 
} 

popup.html

<html> 
    <head> 
    <script src="popup.js"></script> 
    </head> 
    <body style='width : 400px;'> 
    <div id="message">Getting File.....</div> 
    </body> 
</html> 

popup.js

var xhr = new XMLHttpRequest(); 

xhr.open('GET', 'http://www.w3schools.com/jsref/lastmodified.htm', true); 

xhr.onerror = function() { 
    var message = document.querySelector('#message'); 
    message.innerText = 'Error getting url'; 
} 

xhr.onreadystatechange = function() { 
    // readystate 2, headers recieved 
    if (this.readyState == 2){ 
     var message = document.querySelector('#message'); 
     if (this.getResponseHeader("Last-Modified")){ 
      message.innerText = 'Got the headers\n'; 
      message.innerText += 'Last Last-Modified : ' + this.getResponseHeader("Last-Modified"); 
     } else { 
      message.innerText = 'Got the headers\n'; 
      message.innerText += 'But there was no Last-Modified\n'; 
      // If the file doesnt exist your still going to get headers 
      message.innerText += 'Or there was an error in getting the file'; 
     } 
     // Make sure you access the headers before this abort, as they wont be available afterwards 
     this.abort(); 
    } 
} 

xhr.send(); 
相關問題