banner
MACSITE

@MACSITE

兴趣是学习的动力,学习也能成为消遣!--你愁啥-ncs.fun

Qexo友链hexo-Nextテーマ適応

私は本当に麻痺しています#

cdn の js ライブラリが無効になり、ファイルがなくなりました。すべてサードパーティの適応です、公式が提供する友リンク申請の適応は使えなくなりました

醜いけれど使えるんです😬

本当はスクリーンショットを比較したかったのですが、もうありません

本当にたくさんの罠があります。友人に js と css をローカルにダウンロードすることをお勧めします。無効になったら使えなくなります#

<div id="friends-api"></div>
<script src="https://cdn.jsdelivr.net/gh/Fgaoxing/blog-cdn@main/source/js/friends-api.js"></script>
<script>qexo_friend_api("friends-api","Qexoドメイン");</script>

https://cdn.jsdelivr.net/gh/Fgaoxing/blog-cdn@main/source/js/friends-api.js

js が無効になりました#

これは公式が提供する @Fgaoxing によって適応された友リンク申請 API です

数日間だけでした、私がテストしたときはまだ使えました😵

私が変更したもの#

使用しているのは Icarus 友リンク申請ページに適応された next テーマです

直接コードを載せます、間違っているかもしれません

まず links ページを生成します、みんなできますよね?about を生成するのと同じように、

次に links の中の index.md を編集します

---
title: 友人帳
date: 2023-03-29 13:53:04
type: "links"
#コメント機能はデフォルトでfalseに設定されています
comments: false
---
<div id="qexo-friends"></div>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/qexo-static@1.1.3/hexo/friends/friends.css"/>
<script src="https://cdn.jsdelivr.net/npm/qexo-static@1.1.3/hexo/friends/friends.js"></script>
<script>loadQexoFriends("qexo-friends", "https://あなたのインターフェース")</script>

<script src=https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js></script>
<link rel=stylesheet href=https://cdn.staticfile.org/font-awesome/5.15.4/css/all.min.css>
<link rel=stylesheet href=htpps://あなたがcssを置いたURL/css-js/friends-api.css>
<article class="message is-info">
    <div class="message-header">
        友リンク申請
    </div>
    <div class="message-body">
        <div class="form-ask-friend">
            <div class="field">
                <label class="label">名称</label>
                <div class="control has-icons-left">
                    <input class="input" type="text" placeholder="あなたのサイト名" id="friend-name" required>
                    <span class="icon is-small is-left">
                        <i class="fas fa-signature"></i>
                    </span>
                </div>
            </div>
            <div class="field">
                <label class="label">リンク</label>
            <div class="control has-icons-left">
                <input class="input" type="url" placeholder="あなたのサイトのホームページのリンク" id="friend-link" required>
                <span class="icon is-small is-left">
                    <i class="fas fa-link"></i>
                </span>
            </div>
            <p class="help ">サイトがアクセス可能であることを確認してください!</p>
            </div>
            <div class="field">
                <label class="label">アイコン</label>
                <div class="control has-icons-left">
                    <input class="input" type="url" placeholder="あなたのサイトのアイコン(できるだけ円形に)" id="friend-icon" required>
                    <span class="icon is-small is-left">
                        <i class="fas fa-image"></i>
                    </span>
                </div>
            </div>
            <div class="field">
                <label class="label">説明</label>
                <div class="control has-icons-left">
                    <input class="input" type="text" placeholder="あなたのサイトを一言で紹介してください" id="friend-des" required>
                    <span class="icon is-small is-left">
                        <i class="fas fa-info"></i>
                    </span>
                </div>
            </div>
            <div class="field">
                <div class="control">
                    <label class="checkbox">
                        <input type="checkbox" id="friend-check"/> 私が提出するのは無意味な情報ではありません
                    </label>
                </div>
            </div>
            <div class="field is-grouped">
                <div class="control">
                    <button class="button is-info" type="submit" onclick="askFriend(event)" id="commitbtn">友リンクを申請する</button>
                </div>
            </div>
        </div>
    </div>
</article>
<script src="https://recaptcha.net/recaptcha/api.js?render=あなたのreCaptchaキー"></script>
<script>
function TestUrl(url) {
    var Expression=/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/;
    var objExp=new RegExp(Expression);
    if(objExp.test(url) != true){
        return false;
    }
    return true;
}
function askFriend (event) {
    let check = $("#friend-check").is(":checked");
    let name = $("#friend-name").val();
    let url = $("#friend-link").val();
    let image = $("#friend-icon").val();
    let des = $("#friend-des").val();
    if(!check){
        alert("「私が提出するのは無意味な情報ではありません」にチェックを入れてください");
        return;
    }
    if(!(name&&url&&image&&des)){
        alert("情報が不完全です! ");
        return;
    }
    if (!(TestUrl(url))){
        alert("URL形式が間違っています! HTTPプロトコルヘッダーを含む必要があります! ");
        return;
    }
    if (!(TestUrl(image))){
        alert("画像URL形式が間違っています! HTTPプロトコルヘッダーを含む必要があります! ");
        return;
    }
    event.target.classList.add('is-loading');
    grecaptcha.ready(function() {
          grecaptcha.execute('あなたのreCaptchaキー', {action: 'submit'}).then(function(token) {
              $.ajax({
                type: 'get',
                cache: false,
                url: url,
                dataType: "jsonp",
                async: false,
                processData: false,
                //timeout:10000, 
                complete: function (data) {
                    if(data.status==200){
                    $.ajax({
                        type: 'POST',
                        dataType: "json",
                        data: {
                            "name": name,
                            "url": url,
                            "image": image,
                            "description": des,
                            "verify": token,
                        },
                        url: 'https://qexo.ncs.fun/pub/ask_friend/',
                        success: function (data) {
                            alert(data.msg);
                        }
                    });}
                    else{
                        alert("URLに接続できません!リフレッシュしてリンク内容を変更して再試行してください");
                    }
                    event.target.classList.remove('is-loading');
                }
          });
        });
    });
document.getElementById("commitbtn").setAttribute("disabled", true);
document.getElementById("commitbtn").innerHTML = 'ボタンが無効になりました😁、成功の通知を待ってください、少し遅れるかもしれません😒';
}
</script>

注意#

<link rel=stylesheet href=htts://あなたがcssを置いたURL/css-js/friends-api.css>

以下は css コードです

@-moz-keyframes spinAround {
	from {
	transform:rotate(0)
}
to {
	transform:rotate(359deg)
}
}@-webkit-keyframes spinAround {
	from {
	transform:rotate(0)
}
to {
	transform:rotate(359deg)
}
}@-o-keyframes spinAround {
	from {
	transform:rotate(0)
}
to {
	transform:rotate(359deg)
}
}@keyframes spinAround {
	from {
	transform:rotate(0)
}
to {
	transform:rotate(359deg)
}
}.breadcrumb,.button,.delete,.file,.is-unselectable,.modal-close,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.tabs {
	-webkit-touch-callout:none;
	-webkit-user-select:none;
	-moz-user-select:none;
	-ms-user-select:none;
	user-select:none
}
.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after {
	border:3px solid transparent;
	border-radius:2px;
	border-right:0;
	border-top:0;
	content:" ";
	display:block;
	height:.625em;
	margin-top:-.4375em;
	pointer-events:none;
	position:absolute;
	top:50%;
	transform:rotate(-45deg);
	transform-origin:center;
	width:.625em
}
.button.is-loading::after,.control.is-loading::after,.loader,.select.is-loading::after {
	animation:spinAround .5s infinite linear;
	border:2px solid #dbdbdb;
	border-radius:290486px;
	border-right-color:transparent;
	border-top-color:transparent;
	content:"";
	display:block;
	height:1em;
	position:relative;
	width:1em
}

html {
    height: 100%;
    -webkit-text-size-adjust: 100%;
    -moz-text-size-adjust: 100%;
    -ms-text-size-adjust: 100%;
    text-size-adjust: 100%;
}

html {
	background-color:#f7f7f7;
	font-size:14px;
	-moz-osx-font-smoothing:grayscale;
	-webkit-font-smoothing:antialiased;
	min-width:300px;
	overflow-x:hidden;
	overflow-y:scroll;
	text-rendering:optimizeLegibility;
	text-size-adjust:100%
}

.button {
    /* background-color: #fff; */
    /* border-color: #dbdbdb; */
    /* border-width: 1px; */
    /* color: #363636; */
    cursor: pointer;
    justify-content: center;
    padding-bottom: calc(0.375em - 1px);
    padding-left: 1em;
    padding-right: 1em;
    padding-top: calc(0.375em - 1px);
    text-align: center;
    white-space: nowrap;
}




.button,.file-cta,.file-name,.input,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.select select,.textarea {
	-moz-appearance:none;
	-webkit-appearance:none;
	align-items:center;
	border:1px solid transparent;
	border-radius:4px;
	box-shadow:none;
	display:inline-flex;
	font-size:1rem;
	height:2.25em;
	justify-content:flex-start;
	line-height:1.5;
	padding-bottom:calc(.5em - 1px);
	padding-left:calc(.75em - 1px);
	padding-right:calc(.75em - 1px);
	padding-top:calc(.5em - 1px);
	position:relative;
	vertical-align:top
}

.button.is-info {
    background-color: #222;
    border-color: transparent;
    color: #fff;
}
.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after {
	border:3px solid transparent;
	border-radius:2px;
	border-right:0;
	border-top:0;
	content:" ";
	display:block;
	height:.625em;
	margin-top:-.4375em;
	pointer-events:none;
	position:absolute;
	top:50%;
	transform:rotate(-45deg);
	transform-origin:center;
	width:.625em
}








.message-header {
	align-items:center;
	background-color:#4a4a4a;
	border-radius:4px 4px 0 0;
	color:#fff;
	display:flex;
	font-weight:700;
	justify-content:space-between;
	line-height:1.25;
	padding:.75em 1em;
	position:relative
}

.message-header+.message-body {
	border-width:0;
	border-top-left-radius:0;
	border-top-right-radius:0
}
.message-body {
	border-color:#dbdbdb;
	border-radius:4px;
	border-style:solid;
	border-width:0 0 0 4px;
	color:#4a4a4a;
	padding:1.25em 1.5em
}


.button.is-info {
	font-weight: 900;
}


.icon {
	align-items:center;
	display:inline-flex;
	justify-content:center;
	height:1.5rem;
	width:1.5rem
}




.input,.select select,.textarea {
	background-color:#fff;
	border-color:#dbdbdb;
	border-radius:4px;
	color:#363636
}

.input::-webkit-input-placeholder,.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder {
	color:rgba(54,54,54,.3)
}

.input[disabled]::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder {
	color:rgba(122,122,122,.3)
}

.input,.textarea {
	box-shadow:inset 0 .0625em .125em rgba(10,10,10,.05);
	max-width:100%;
	width:100%
}

.input.is-dark,.textarea.is-dark {
	border-color:#363636
}


.label {
	color:#363636;
	display:block;
	font-size:1rem;
	font-weight:700
}


.help {
	display:block;
	font-size:.75rem;
	margin-top:.25rem
}


@media screen and (max-width:768px) {
	.field-label {
	margin-bottom:.5rem
}
}@media screen and (min-width:769px),print {
	.field-label {
	flex-basis:0;
	flex-grow:1;
	flex-shrink:0;
	margin-right:1.5rem;
	text-align:right
}

.field-label.is-large {
	font-size:1.5rem;
	padding-top:.375em
}

@media screen and (min-width:769px),print {
	.field-body {
	display:flex;
	flex-basis:0;
	flex-grow:5;
	flex-shrink:1
}
{
	margin-right:.75rem
}

}.control {
	box-sizing:border-box;
	clear:both;
	font-size:1rem;
	position:relative;
	text-align:left
}

.control.has-icons-left .input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right .select:focus~.icon {
	color:#4a4a4a
}


.control.has-icons-left .icon,.control.has-icons-right .icon {
	color:#dbdbdb;
	height:2.25em;
	pointer-events:none;
	position:absolute;
	top:0;
	width:2.25em;
	z-index:4
}
.control.has-icons-left .input,.control.has-icons-left .select select {
	padding-left:2.25em
}
.control.has-icons-left .icon.is-left {
	left:0
}

*, ::after, ::before {
    box-sizing: inherit;
}

.message.is-info {
    background-color: #f5f5f5;
}


}.article .content {
	overflow:auto
}


@media screen and (min-width:768px) {
	.navbar-logo img {
	padding-left:inherit
}
}.grecaptcha-badge {
	display:none
}

.checkbox, .radio {
    cursor: pointer;
    display: inline-block;
    line-height: 1.25;
    position: relative;
}
button, input, select, textarea {
    margin: 0;
}
.control.has-icons-left .icon,.control.has-icons-right .icon {
	color:#dbdbdb;
	height:2.25em;
	pointer-events:none;
	position:absolute;
	top:0;
	width:2.25em;
	z-index:4
}
.control.has-icons-left .input,.control.has-icons-left .select select {
	padding-left:2.25em
}
.control.has-icons-left .icon.is-left {
	left:0
}
.control {
    box-sizing: border-box;
    clear: both;
    font-size: 1rem;
    position: relative;
    text-align: left;
}
*, ::after, ::before {
    box-sizing: inherit;
}

source ディレクトリ内に css-js フォルダを新規作成し、friends-api.cssファイルを新規作成してコードを書き込みます

これで全て終了です#

まとめ#

ブロガーは next スタイルを適応し、重複提出の設定を行いました。コードを見ればわかります。問題があればコメント欄で質問してください。できるだけ早く回答します。#

最後に#

自分のバックアップの friends-api.js を見つけました、へへ#

function qexo_friend_api(id, url, reCaptcha) {
    qexo_url = url;
    Qexo_reCaptcha_Key = reCaptcha
    var loadStyle = '<div class="qexo_loading"><div class="qexo_part"><div style="display: flex; justify-content: center"><div class="qexo_loader"><div class="qexo_inner one"></div><div class="qexo_inner two"></div><div class="qexo_inner three"></div></div></div></div><p style="text-align: center; display: block">友リンク申請読み込み中...</p></div>';
    document.getElementById(id).className = "friend-api";
    document.getElementById(id).innerHTML = loadStyle;
    document.getElementById(id).innerHTML = '<center><p>友リンクを申請するには、まずこのサイトの友リンクを追加してください</p><div class="friend-api"><style>input.qexo-friend-input {flex: 1 1 0%;display: block;width: 80%;height: calc(1.5em + 1.25rem + 2px);padding: 0.625rem 0.75rem;font-weight: 400;color: #8898aa;box-shadow: 0 3px 2px rgb(233 236 239 / 5%);transition: all 0.15s cubic-bezier(0.68, -0.55, 0.265, 1.55);overflow: visible;margin: 0;font-family: inherit;font-size: inherit;line-height: inherit;position: relative;display: flex;flex-direction: column;min-width: 0;word-wrap: break-word;background-color: #fff;background-clip: border-box;border: 1px solid rgba(0, 0, 0, 0.05);border-radius: 0.375rem;black;}button.qexo-friend-button {cursor: pointer;position: relative;text-transform: none;transition: all 0.15s ease;letter-spacing: 0.025em;font-size: 0.875rem;will-change: transform;color: #fff;background-color: #5e72e4;border-color: #5e72e4;box-shadow: 0 4px 6px rgb(50 50 93 / 11%), 0 1px 3px rgb(0 0 0 / 8%);vertical-align: middle;cursor: pointer;user-select: none;border: 1px solid transparent;padding: 0.625rem 1.25rem;font-size: 0.875rem;line-height: 1.5;border-radius: 0.25rem;transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;}</style><input type="text" id="qexo_friend_name" class="qexo-friend-input" placeholder="あなたのサイト名"><br><input type="text" id="qexo_friend_brief introduction" class="qexo-friend-input" placeholder="あなたのサイトを一言で紹介してください"><br><input type="text" id="qexo_friend_website" class="qexo-friend-input"  placeholder="あなたのサイトのホームページのリンク"><br><input type="text" id="qexo_friend_logo" class="qexo-friend-input" placeholder="あなたのサイトのアイコンのURL"><br><button type="button" class="qexo-friend-button" id="qexo-friend-btn" onclick="friend_api()">友リンクを申請する</button></div></center><br>';
}

function friend_api() {

    document.getElementById('qexo-friend-btn').style.color = '#000';
    document.getElementById('qexo-friend-btn').style.backgroundColor = '#fff';
    document.getElementById('qexo-friend-btn').innerHTML = '送信中、少々お待ちください...';

    let ask = function (token = '') {
        var name = document.getElementById('qexo_friend_name').value;
        var introduction = document.getElementById('qexo_friend_brief introduction').value;
        var website = document.getElementById('qexo_friend_website').value;
        var logo = document.getElementById('qexo_friend_logo').value;
        var uri = qexo_url + '/pub/ask_friend/';
        if (!name || !website || !logo) {
            document.getElementById('qexo-friend-btn').style.backgroundColor = '#f5365c';
            document.getElementById('qexo-friend-btn').innerHTML = "まず内容を記入してください";
            return 0;
        }
        if (!/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/.test(website) || !/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/.test(logo)) {
            document.getElementById('qexo-friend-btn').style.backgroundColor = '#f5365c';
            document.getElementById('qexo-friend-btn').innerHTML = "正しいURLをhttpヘッダー付きで記入してください";
            return 0;
        }
        let body = {
            name: name, url: website, image: logo, description: introduction
        }
        if (token) {
            body["verify"] = token;
        }
        data = ''
        for (i in body) {
            data += `&${i}=${encodeURIComponent(body[i])}`
        }
        data = data.slice(1)
        fetch(uri, {
            method: 'post', body: data, headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
        }).then(function (data) {
            if (data.ok) {
                data.json().then(function (res) {
                    document.getElementById('qexo-friend-btn').style.color = '#fff';
                    if (res["status"]) {
                        document.getElementById("qexo-friend-btn").setAttribute("disabled", true)
						document.getElementById('qexo-friend-btn').style.backgroundColor = '#2dce89';
                        document.getElementById('qexo-friend-btn').innerHTML = '送信成功、ブロガーの確認を待ってください!結果を通知することはありません、ありがとうございます!';
                    } else {
                        document.getElementById('qexo-friend-btn').style.backgroundColor = '#f5365c';
                        document.getElementById('qexo-friend-btn').innerHTML = "友リンク申請に失敗しました。ヒント:" + res["msg"];
                    }
                });
            } else {
                document.getElementById('qexo-friend-btn').style.color = '#fff';
                document.getElementById('qexo-friend-btn').style.backgroundColor = '#f5365c';
                document.getElementById('qexo-friend-btn').innerHTML = "ネットワーク異常!";
            }
        });
    }
    if (Qexo_reCaptcha_Key) {
        grecaptcha.ready(function () {
            grecaptcha.execute(reCaptcha, {action: 'submit'}).then(function (token) {
                ask(token)
            });
        });
    } else {
        ask()
    }
}

原版の申請を使いたい方は自分で持って行ってください🙄

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。