使用Javascript覆盖或禁用元刷新标记

时间:2010-07-15 05:39:47

标签: javascript html ajax meta-tags

我有一个网站,我试图使用Ajax更新页面上的一些东西而不重新加载它。但是,我的很多用户很可能会使用不支持Javascript的移动浏览器,因此我尝试使用元刷新标签设计页面,这种方式只适用于没有Javascript的用户。有没有办法做到这一点?

我尝试将标签放在一个noscript元素中,但我的原始手机浏览器不承认它。我想可能设置一个cookie来记住用户的浏览器是否支持Javascript,或者有一个版本的页面无需Javascript,并尝试使用Javascript将用户重定向到更复杂的版本,但我想知道是否有这是一种更优雅的方式。有没有人有任何想法?

8 个答案:

答案 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。

  • 右键点击网页&gt;编辑网站偏好设置...&gt;网络&gt;禁用“启用自动重定向”&gt;行。

答案 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>