如何在论坛中为永久链接生成QR码?

时间:2012-09-01 21:53:56

标签: javascript greasemonkey qr-code permalinks userscripts

我想使用QR码来简化使用我的Android智能手机浏览某些论坛。

我正在寻找一个Greasemonkey脚本,它在论坛帖子的每个帖子的每个永久链接旁放置一个二维码。

我有一些模板可供使用,YouTube'共享'QR脚本:

var shareBoxCheckInterval   = setInterval (AddQR_Code, 200);

function AddQR_Code () {
var shareDiv    = document.querySelector ('.share-option-container .ytg-box');
if (shareDiv) {
    var qrIMG   = 'http://chart.googleapis.com/chart?chl=' 
                + window.location.href + '&chld=M%7C0&cht=qr&chs=125x125';
    var img     = document.createElement ('img');
    img.src     = qrIMG;
    img.width   = 125;
    img.height  = 125;
    shareDiv.appendChild (img);
    clearInterval (shareBoxCheckInterval);
    }
}

这样做是为了向Youtube的分享箱添加QR码,如下所示:

Qr code sample result

便于从PC到手机的视频传输。

如何调整此代码以使用论坛固定链接,并使用QR代码图像替换链接的文本?

例如,在this thread on the Minecraft forum上,每个帖子的右上角都有一个小链接,上面写着“#1”,“#2”,“#3”,无限广告 - 这些链接指向该特定内容帖子。

用户将做的是用链接到该帖子的QR码图片(由Google API生成)替换“#1”文本,同时也是可点击的超链接图像(也链接到该帖子)。

然后会对页面上的每个永久链接重复此操作。

这是可能的,如果是的话,怎么样?

1 个答案:

答案 0 :(得分:0)

好的,这是一个完整的脚本,它会遍历帖子书签并添加QR码。

我留下了后期号码,因为它们对我在我使用的论坛上很有用。如果您确实希望它们消失,请在$(this).text (" ");行之前添加$(this).append (...

注意使用CSS来设置样式(好),而不是标记属性(邪恶)。

该脚本稍微复杂,需要withPages_jQuery结构才能使其与Google Chrome兼容(如标记所示)。

// ==UserScript==
// @name        _Minecraft Forum, post barcodizer
// @namespace   _pc
// @include     http://www.minecraftforum.net/topic/*
// @grant       GM_addStyle
// ==/UserScript==

function GM_scriptMain ($) {
    var postBkMarks = $("div.post_block div.post_wrap h3 span.post_id a");
    postBkMarks.each ( function () {
        var qrIMG   = 'http://chart.googleapis.com/chart?chl='
                    + encodeURIComponent (this.href)
                    + '&chld=M%7C0&cht=qr&chs=125x125'
                    ;
        $(this).append ('<img src="' + qrIMG + '">');
    } );
}

withPages_jQuery (GM_scriptMain);

GM_addStyle (
    "h3 span.post_id a img {width: 125px; height: 125px;}"
);

function withPages_jQuery (NAMED_FunctionToRun) {
    //--- Use named functions for clarity and debugging...
    var funcText        = NAMED_FunctionToRun.toString ();
    var funcName        = funcText.replace (/^function\s+(\w+)\s*\((.|\n|\r)+$/, "$1");
    var script          = document.createElement ("script");
    script.textContent  = funcText + "\n\n";
    script.textContent += 'jQuery(document).ready(function() {'+funcName+'(jQuery);});';
    document.body.appendChild (script);
};

(适用于FF / GM,Chrome,Tampermonkey和其他浏览器)。



Firefox(Greasemonkey) - 仅版本(可能是Tampermonkey)更简单:

// ==UserScript==
// @name        _Minecraft Forum, post barcodizer
// @namespace   _pc
// @include     http://www.minecraftforum.net/topic/*
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant       GM_addStyle
// ==/UserScript==

var postBkMarks = $("div.post_block div.post_wrap h3 span.post_id a");
postBkMarks.each ( function () {
    var qrIMG   = 'http://chart.googleapis.com/chart?chl='
                + encodeURIComponent (this.href)
                + '&chld=M%7C0&cht=qr&chs=125x125'
                ;
    $(this).append ('<img src="' + qrIMG + '">');
} );

GM_addStyle (
    "h3 span.post_id a img {width: 125px; height: 125px;}"
);