programing

Javascript를 사용하여 메타 새로 고침 태그 재정의 또는 비활성화

telecom 2023. 8. 23. 21:35
반응형

Javascript를 사용하여 메타 새로 고침 태그 재정의 또는 비활성화

저는 Ajax를 사용하여 페이지의 일부 내용을 다시 로드하지 않고 업데이트하려고 하는 웹 사이트를 가지고 있습니다.하지만 많은 사용자가 Javascript를 지원하지 않는 모바일 브라우저를 사용할 가능성이 높기 때문에 어떻게든 Javascript가 없는 사용자에게만 작동하는 메타 리프레시 태그로 페이지를 디자인하려고 합니다.이것을 할 수 있는 방법이 있습니까?

태그를 스크립트 요소에 넣으려고 했지만 원시 휴대폰 브라우저가 인식하지 못했습니다.사용자의 브라우저가 Javascript를 지원하는지 기억할 수 있도록 쿠키를 설정하거나, Javascript 없이 작동하는 페이지의 한 버전을 가지고, Javascript를 사용하여 사용자를 좀 더 정교한 버전으로 리디렉션하려고 하는데, 더 우아한 방법이 있는지 궁금합니다.아이디어 있는 사람?

저는 이것에 대해 noscript 태그가 꽤 잘 작동한다는 것을 발견했습니다.예를 들어, 헤드 요소를 닫은 후 바로 배치할 수 있습니다.

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

스크립트를 지원하는 브라우저는 noscript 요소 내의 모든 것을 무시하기 때문에 스크립트와 함께 메타 태그를 제거할 필요가 없습니다.

JavaScript로 메타 새로 고침 태그를 재정의할 수 없습니다.

하지만 당신은 이것을 할 수 있습니다.

페이지가 ->에 있다고 가정합니다.

http://example.net/mike.html 거기에 다음 코드를 넣어주세요->

<script type="text/javascript">
window.location = 'http://example.net/mike/for_Those_With_JavaScript_Enabled.html';
</script>

불행하게도, @bluesmoon의 대답으로부터, DOM을 조작하는 것은 더 이상 작동하지 않습니다.

해결 방법은 원래 마크업을 검색하고 메타 새로 고침 요소를 찾아 바꾼 다음 교체된 마크업으로 새 문서를 작성하는 것입니다.

다음을 사용하여 추가 요청을 보내는 것 외에 자바스크립트를 사용하여 원본 마크업을 검색하는 방법을 잘 모르겠습니다.XMLHttpRequest.

오페라에서 제가 사용하는 것은 다음과 같습니다.

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가 필요 없습니다.

  • 웹 페이지 > 사이트 환경설정 편집...에서 마우스 오른쪽 단추를 누릅니다.> 네트워크 > "자동 리디렉션 사용" 비활성화 > 확인.

이것은 저에게 아주 잘 작동했습니다! (크롬으로 시도)

window.stop();

메타 태그는 이 경우 끔찍합니다.검색 엔진은 어떻습니까?

당신이 해야 할 일은 제가 여기서 개요를 설명한 것과 같은 것으로 만드는 것입니다.링크는 웹 2.0 페이지처럼 전체 작업 사이트를 가리켜야 합니다.그런 다음 이벤트 핸들러(클릭 시)를 사용하면 Ajax를 사용하여 사용자 환경을 향상시킬 수 있습니다.

따라서 Ajax 사용자는 링크로 이동하지 않고, 링크를 클릭하면 링크가 처리되고 Ajax GET 매개 변수가 있는 정확한 동일한 URL로 Ajax 요청을 클릭하면 링크가 처리됩니다.

이제 서버 측에서는 어떤 방법으로든 전체 사이트를 생성할 수 있어야 합니다.아약스 요청일 경우 관련 내용을 보내주시기 바랍니다.Ajax 요청이 아닌 경우 관련 부품이 포함된 전체 사이트를 생성합니다.

당신의 사이트는 SEO 친화적이고 모바일 사용자들이 이용할 수 있으며 현대의 브라우저와 플랫폼에 있는 사람들을 위해 점진적으로 향상될 것입니다.마지막으로 Ajax에서 생성된 해시 링크를 링크로 사용할 수 있습니다.

멋지네요 :)

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으로 설정하지 마세요.0은 백버튼 사용성을 깨기 때문에 성가시기도 합니다.

2012-10-23 편집 더 이상 작동하지 않는 것 같습니다.노드는 여전히 제거되지만 브라우저가 모든 메타 태그를 구문 분석하고 메모리에 보관하는 것으로 나타납니다.

메타 리프레시가 올바른 방향이 아니라는 데 동의합니다.galambalaz의 링크 외에도 "진보적 향상"을 검색합니다.

하지만, 그 질문에 대답하는 정신으로, 당신은 다음을 시도할 수 있습니다.테스트되지 않았으며 모든 브라우저에서 작동하지 않을 수 있지만 올바른 행을 따라야 합니다.

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]);
    }
}

이를 제거하면 브라우저가 제때 새로 고쳐지지 않을지는 두고 봐야 합니다.

이것은 제가 사용하는 것의 예이며 (특히 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>

언급URL : https://stackoverflow.com/questions/3252743/using-javascript-to-override-or-disable-meta-refresh-tag

반응형