21

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

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

4

8 回答 8

12

我发现 noscript 标签对此非常有效。例如,您可以在关闭head 元素后放置它:

<noscript>
    <meta http-equiv="refresh" content="5;URL=http://www.example.com">
</noscript>

无需删除带有脚本的元标记,因为具有脚本支持的浏览器将忽略 noscript 元素内的所有内容。

于 2012-10-26T08:46:52.283 回答
10

您不能使用 JavaScript 覆盖元刷新标记。

但是你可以这样做

假设您的页面位于 ->

http://example.net/mike.html 把下面的代码放在那里->

<script type="text/javascript">
window.location = 'http://example.net/mike/for_Those_With_JavaScript_Enabled.html';
</script>
于 2010-07-18T03:13:36.857 回答
6

不幸的是,从@bluesmoon 的回答来看,操作 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。

  • 右键单击网页>编辑站点首选项...>网络>禁用“启用自动重定向”>确定。
于 2012-12-01T05:52:20.017 回答
5

这对我来说太棒了!(在铬中试过)

window.stop();
于 2017-09-20T05:08:03.477 回答
4

在这种情况下,元标签很糟糕。搜索引擎呢??

你应该做的是让它像我在这里概述的那样。您的链接应该指向完整的工作站点,就好像它是一个 web 2.0 页面一样。然后使用事件处理程序 (onclick),您可以通过使用 ajax 来增强用户体验。

所以 ajax 用户不会去链接,当点击链接并发送一个 ajax 请求到完全相同的 url 但带有 ajax GET 参数时,链接会被处理。

现在在服务器端,您必须能够通过某种方法生成整个站点。如果是 ajax 请求,则发送相关内容。如果它不是 ajax 请求,则生成包含嵌入相关部分的完整站点。

您的网站将是SEO 友好的可供移动用户使用,并为现代浏览器和平台上的人们逐步增强。最后,ajax 生成的哈希链接将可用,即使作为链接。

真棒。:)

于 2010-07-15T11:01:14.077 回答
3

只需使用 javascript 删除元标记:

<meta http-equiv="refresh" content="2;http://new-url/" id="meta-refresh">

<script type="text/javascript">
var mr = document.getElementById("meta-refresh");
mr.parentNode.removeChild(mr);
</script>

作为示例,我已将刷新超时设置为 2 秒以上。您可能也可以逃脱 1 秒,但不要将其设置为 0,因为在这种情况下 javascript 将没有机会执行。0 也很烦人,因为它破坏了后退按钮的可用性。

编辑 2012-10-23这似乎不再起作用。该节点仍会被删除,但似乎浏览器会以任何方式解析所有元标记并将其保存在内存中。

于 2010-07-25T01:42:18.543 回答
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]);
    }
}

删除它是否会阻止浏览器及时刷新还有待观察。

于 2010-07-18T03:12:31.363 回答
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>
于 2016-01-24T12:12:33.013 回答