获取远程url';s最后一次使用javascript修改日期
我正在尝试获取使用javascript更新远程url的最后日期。我目前提出了以下建议:获取远程url';s最后一次使用javascript修改日期,javascript,html,url,google-chrome-extension,Javascript,Html,Url,Google Chrome Extension,我正在尝试获取使用javascript更新远程url的最后日期。我目前提出了以下建议: function getlastmod(url) { var ifrm = document.createElement("IFRAME"); ifrm.setAttribute("src", url); ifrm.setAttribute("id", "oIFRAME"); ifrm.style.display = "none"; var spanTag = do
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为什么它出现在try-catch语句中?你认为它会出错吗?因为你基本上依赖于它。是否设置outUpdate的初始值?它是否曾经进入catch语句? 为什么必须在这里使用getlastmod()和getLastModified()函数? 如果将其设置为:
var outUpdate = "init";
...
...
getlastmod("/");
console.log("outUpdate is: ", outUpdate);
您正在访问元素
oIFRAME
和oSpan
,在将它们添加到文档之前,您必须在try
块之前添加这两行:
document.body.appendChild(ifrm);
document.body.appendChild(spanTag);
iFrame
的id是oIFRAME而不是oIFRAME,请替换此行:
var oIFrame = document.getElementById("oIFrame");
借
document
不是iFrame
对象的属性,contentDocument
是。更换这条线
oIFrame.document.lastModified;
借
如果您不打算显示页面,您可以使用xhr节省一些带宽。
这里有些东西可以让你走 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
}
<html>
<head>
<script src="popup.js"></script>
</head>
<body style='width : 400px;'>
<div id="message">Getting File.....</div>
</body>
</html>
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();
outUpdate是什么变量?它是全局变量还是您打算通过此函数返回它?@GrzegorzKaczan它是一个全局变量,稍后将使用。感谢您非常描述性的回答!我已经相应地更改了代码,但是outUpdate现在接受了“[object HtmlPanelment]”的值。我需要它来获取修改日期的值?您必须用
outUpdate=oSpan
替换为outUpdate=oSpan.textContent
或outUpdate=oSpan.innerHTML
这两种方法都有效。谢谢!但是,它似乎返回的是确切的当前日期和时间,而不是修改的日期?lastModified属性返回当前文档上次修改的日期和时间,该日期和时间等于iframe的src
属性更改的日期和时间,这就是您看到“确切的当前日期和时间”的原因。因此,此方法无法远程获取url的上次修改日期?
<html>
<head>
<script src="popup.js"></script>
</head>
<body style='width : 400px;'>
<div id="message">Getting File.....</div>
</body>
</html>
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();