1

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

我正在寻找一个 Greasemonkey 脚本,它在论坛主题的每个永久链接、每个帖子的每个永久链接旁边放置一个 QR 码。

我有一些模板可以使用,YouTube 'share' 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 的分享框中添加一个二维码,如下所示:

二维码示例结果

轻松将视频从 PC 传输到手机。

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

例如,在Minecraft 论坛上的这个帖子中,每条帖子的右上角都有一个小链接,上面写着“#1”、“#2”、“#3”,无穷无尽——它链接到那个特定的帖子。

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

然后它将为页面上的每个永久链接重复此操作。

这可能吗?如果可以,怎么做?

4

1 回答 1

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;}"
);
于 2012-09-02T06:31:37.603 回答