我有一个网站,我试图使用Ajax更新页面上的一些东西而不重新加载它。但是,我的很多用户很可能会使用不支持Javascript的移动浏览器,因此我尝试使用元刷新标签设计页面,这种方式只适用于没有Javascript的用户。有没有办法做到这一点?
我尝试将标签放在一个noscript元素中,但我的原始手机浏览器不承认它。我想可能设置一个cookie来记住用户的浏览器是否支持Javascript,或者有一个版本的页面无需Javascript,并尝试使用Javascript将用户重定向到更复杂的版本,但我想知道是否有这是一种更优雅的方式。有没有人有任何想法?
答案 0 :(得分:10)
您无法使用JavaScript覆盖元刷新标记。
但是你可以这样做
假设您的网页位于 - >
http://example.net/mike.html 将以下代码放在那里 - >
<script type="text/javascript">
window.location = 'http://example.net/mike/for_Those_With_JavaScript_Enabled.html';
</script>
答案 1 :(得分:10)
我发现noscript标签对此非常有效。例如,您可以在关闭头元素之后放置它:
<noscript>
<meta http-equiv="refresh" content="5;URL=http://www.example.com">
</noscript>
无需使用脚本删除元标记,因为具有脚本支持的浏览器将忽略noscript元素中的所有内容。
答案 2 :(得分:6)
不幸的是,从@bluesmoon's answer开始,操纵DOM不再起作用了。
解决方法是检索原始标记,查找并替换元刷新元素,然后使用替换的标记编写新文档。
我不知道如何使用JavaScript检索原始标记,除非使用XMLHttpRequest
发送其他请求。
在Opera中,我正在使用的是:
Disable meta refresh 1.00.js
:
// ==UserScript==
// @name Disable meta refresh
// @version 1.00
// @description Disables meta refresh.
// @namespace https://stackoverflow.com/questions/3252743/using-javascript-to-override-or-disable-meta-refresh-tag/13656851#13656851
// @copyright 2012
// @author XP1
// @homepage https://github.com/XP1/
// @license Apache License, Version 2.0; http://www.apache.org/licenses/LICENSE-2.0
// @include http*://example.com/*
// @include http*://*.example.com/*
// ==/UserScript==
/*
* Copyright 2012 XP1
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*jslint browser: true, vars: true, maxerr: 50, indent: 4 */
(function (window, XMLHttpRequest) {
"use strict";
if (window.self !== window.top) {
return;
}
window.stop();
var uri = window.location.href;
var request = new XMLHttpRequest();
request.open("GET", uri, false);
request.send(null);
if (!(request.readyState === 4 && request.status === 200)) {
return;
}
var markup = request.responseText;
markup = markup.replace(/<meta http-equiv="refresh".*\/?>/gi, "");
var document = window.document;
document.open();
document.write(markup);
document.close();
}(this, this.XMLHttpRequest));
Opera还具有内置功能,可以禁用元刷新。不需要JavaScript。
答案 3 :(得分:3)
在这种情况下,Meta标签很糟糕。搜索引擎怎么样?
你应该做的就是像我概述的那样 here 。 您的链接应指向完整的工作网站,就好像它是一个Web 2.0页面。然后使用事件处理程序(onclick),您可以使用ajax来增强用户体验。
因此AJAX用户不会去链接,点击并派出一个Ajax请求的网址完全相同,但有一个Ajax GET参数时的链接,而处理。
现在,在服务器端,您必须能够通过某种方法生成整个网站。如果是ajax请求,则发送相关内容。如果它不是ajax请求,则使用相关部分嵌入生成完整网站。
您的网站将是 SEO友好 可用,以移动用户,和渐进增强作为人们对现代浏览器和平台。最后,ajax生成的哈希链接将可用,即使是链接。
<强>迷死即可。 :)
答案 4 :(得分:3)
答案 5 :(得分:3)
这对我很有用! (试过镀铬)
window.stop();
答案 6 :(得分:1)
我同意元刷新不是正确的方法。除了galambalazs的链接,搜索“渐进增强”。
但是,本着回答问题的精神,您可以尝试以下方法。它未经测试,可能无法在所有浏览器中使用,但应该沿着正确的方向运行:
var i, refAttr;
var metaTags = document.getElementsByTagName('meta');
for i in metaTags {
if( (refAttr = metaTags[i].getAttribute("http-equiv")) && (refAttr == 'refresh') ) {
metaTags[i].parentNode.removeChild(metaTags[i]);
}
}
是否删除它会阻止浏览器及时刷新还有待观察。
答案 7 :(得分:0)
这是我使用的一个例子,它完美运行(特别是在Firefox上)!
<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>Redirecting</title>
</head>
<body onload="location.replace('http://www.live.comeseetv.com'+document.location.hash)">
<a href="http://www.live.comeseetv.com">Redirecting you to http://www.live.comeseetv.com</a>
</body></html>