CNKI Wikipedia Citation Generator

访问中国知网(cnki.net)的论文信息页面时,生成一个引用按钮,引用为维基百科Cite系列模板格式。Generate a citation button with Wikipedia Cite Template style when visiting the thesis detail page in cnki.net

目前为 2023-02-14 提交的版本。查看 最新版本

// ==UserScript==
// @name         CNKI Wikipedia Citation Generator
// @version      0.2.0
// @description  访问中国知网(cnki.net)的论文信息页面时,生成一个引用按钮,引用为维基百科Cite系列模板格式。Generate a citation button with Wikipedia Cite Template style when visiting the thesis detail page in cnki.net
// @author       Wikipedia User:瑞丽江的河水
// @license      MIT
// @match        https://kns.cnki.net/kcms2/article/abstract?v=*
// @namespace https://gf.qytechs.cn/users/968912
// ==/UserScript==

(function() {
    'use strict';
    var details = getDetails();
    var reference = generateCitation(details);
    generateButton(reference);
    var copy_btn = document.getElementById('cite_wikipedia');
    copy_btn.onclick = function () {
        var cite_text = document.getElementById('wikipedia_template');
        cite_text.select();
        document.execCommand('copy');
        alert("复制成功");
    }
})();

function getDetails() {
    var title = document.getElementsByTagName("h1")[0].innerHTML;
    var i = 0;
    var temp;

    var author_part = document.getElementById("authorpart");
    var authors = [];
    if(author_part !== undefined) {
        var author_nums = author_part.getElementsByTagName("span").length;
        for (i = 0; i < author_nums; i++) {
            temp = author_part.getElementsByTagName("span")[i];
            if(temp.getElementsByTagName("a").length !== 0) {
                authors[i] = temp.getElementsByTagName("a")[0].innerHTML;
                if(authors[i].includes("<sup>")) {
                    authors[i] = authors[i].substring(0, authors[i].indexOf("<sup>"));
                }
            } else {
                temp = temp.innerHTML;
                if(temp.includes(",")) {
                    i = 0;
                    while(temp.includes(",")) {
                        authors[i] = temp.substring(0, temp.indexOf(","));
                        temp = temp.substring(temp.indexOf(",") + 1, temp.length);
                        i++;
                    }
                }
                authors[i] = temp;
            }
        }
    }

    var publication_pre = document.getElementsByClassName("top-tip")[0];
    if(publication_pre !== undefined) {
        var publication = publication_pre.getElementsByTagName("span")[0];
        var journal = "";
        var year = "";
        var volume = "";
        var issue = "";
        if(publication !== undefined) {
            var journal_part = publication.getElementsByTagName("a")[0];
            if(journal_part !== undefined) {
                journal = journal_part.innerHTML;
            }
            var issue_part = publication.getElementsByTagName("a")[1];
            if(issue_part !== undefined) {
                issue_part = issue_part.innerHTML;
                year = issue_part.substring(0, issue_part.indexOf(","));
                volume = issue_part.substring(issue_part.indexOf(",") + 1, issue_part.indexOf("("));
                issue = issue_part.substring(issue_part.indexOf("(") + 1, issue_part.indexOf(")"));
                if(issue.startsWith("0")) {
                    issue = issue.substring(1, issue.length);
                }
            }
        }
    }

    var pages = "";
    var total_info = document.getElementsByClassName("total-inform")[0];
    if(total_info !== undefined) {
        var info_nums = total_info.getElementsByTagName("span").length;
        for(i = 0; i < info_nums; i++) {
            temp = total_info.getElementsByTagName("span")[i].innerHTML;
            if(temp.includes("页码:")) {
                pages = temp.substring(temp.indexOf("页码:") + "页码:".length, temp.length);
                break;
            }
        }
    }

    var doi = "";
    var main_info_length = document.getElementsByClassName("top-space").length;
    if(main_info_length !== 0) {
        for(i = 0; i < main_info_length; i++) {
            temp = document.getElementsByClassName("top-space")[i].getElementsByTagName("span")[0].innerHTML;
            if(temp.includes("DOI:")) {
                doi = document.getElementsByClassName("top-space")[i].getElementsByTagName("p")[0].innerHTML;
                break;
            }
        }
    }
    return [authors, title, journal, year, volume, issue, pages, doi];
}

function generateCitation(details){
    var url = window.location.href;
    var reference = "";
    var i, cnki_id, brief_num, temp, date;

    // Header
    if(details[0] !== []) {
        reference = "<ref name=\"" + details[0][0] + "\">{{cite journal";
    } else {
        reference = "<ref>{{cite journal";
    }
    // Author
    if(details[0] !== []) {
        if(details[0].length > 1) {
            for(i = 0; i < details[0].length; i++) {
                reference = reference + " |author" + (i + 1) + "=" + details[0][i];
            }
        } else {
            reference = reference + " |author=" + details[0][0];
        }
    }
    // Title
    reference = reference + " |title=" + details[1];
    // Journal
    reference = reference + " |journal=" + details[2];
    // Year
    if(details[3] !== "") {
        reference = reference + " |year=" + details[3];
    }
    // volume
    if(details[4] !== "") {
        reference = reference + " |volume=" + details[4];
    }
    // issue
    if(details[5] !== "") {
        reference = reference + " |issue=" + details[5];
    }
    // pages
    if(details[6] !== "") {
        reference = reference + " |pages=" + details[6];
    }
    // doi
    if(details[7] !== "") {
        reference = reference + " |doi=" + details[7];
    }
    // Footer
    reference = reference + " }}</ref>";
    return reference;
}

function generateButton(reference) {
    var content_body = document.getElementsByClassName("wx-tit")[0].innerHTML;
    var info = "<div style='margin-top: 10px; margin-left: 10%; text-align: left;'><b>引用为维基百科Cite模板格式:</b></div>";
    var textarea = "<div style='margin-top: 5px;'><textarea style='padding: 3px; min-width: 80%; height: 38px; border: 2px solid #ccc; border-radius: 4px; background-color: #f8f8f8; resize:none;' id='wikipedia_template' readonly>" + reference + "</textarea></div>";
    var button = "<div style='margin-top: -35px; margin-left: 87%;'><button id='cite_wikipedia' style='padding-top: 3px; padding-bottom: 3px; padding-left: 7px; padding-right: 7px; cursor: pointer;'>复制</button></div>";
    document.getElementsByClassName("wx-tit")[0].innerHTML = info + textarea + button + content_body;
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址