Sleipnir Script BBS



タイトルRe: SaveCache.user.js
カテゴリ: Sleipnir用スクリプト全般
記事No: 685 [関連記事]
投稿日: 2010/10/17(Sun) 17:40
投稿者sk
すいません「SaveCache.user.js」ではなく
「OpenFilteredLinks.js」のほうでした。
よろしくお願いします。


/***************************************************************

             UserAction_OpenFilteredLinks(2006/10/14)
                                        written by sleepy

***************************************************************/

// 設定ここから

// フィルタ
var strFilter = "*.jpg *.jpeg"; // ワイルドカードでの記述の例(blnRegex = false)
//var strFilter = "^(?:.+\.jpg|.+\.jpeg)$"; // 正規表現での記述の例(blnRegex = true)
//var strFilter = ""; // 空文字列だとフィルタ入力ダイアログが表示されます

// フィルタを正規表現で記述するかどうか(true:正規表現で記述、false:ワイルドカードで記述)
var blnRegex = false;

// 開くウィンドウが一枚の場合、アクティブにしたい場合は false を true に変更
var blnActive = false;

// 選択部分が無かった場合、アクティブなドキュメントの全リンクを対象にするか(true:する、false:しない)
var blnGetAll = true;

// 設定ここまで

var Slpnr = sleipnir.API;
String.prototype.chkFilter = chkFilter;
ActiveDocument.prototype.selectedElement = GetSelectedElement;
var AD = new ActiveDocument();
var links = new Array();

Main();

links = null;
AD = null;
Slpnr = null;

function Main(){
    /* アクティブなドキュメントの取得(失敗した場合はスクリプトの実行を中断) */
    if (!AD.getDocument(_document)){
        sleipnir.Echo("Error:UserAction_OpenFilteredLinks");
        sleipnir.Echo("    アクティブなドキュメントの取得に失敗しました。");
        sleipnir.Output.Visible = true;
        return false;
    }
    /* strFilterが空の場合はフィルタ入力ダイアログを表示 */
    if (!strFilter){
        strFilter = Slpnr.InputBox("フィルタを" + (blnRegex?"正規表現":"ワイルドカード") + "で入力してください", "");
    }
    links = AD.selectedElement("A");
    OpenTargetLinks();
    return true;
}

function OpenTargetLinks(){
    var strTmp = "";

    /* 選択部分が無かった場合、アクティブなドキュメントの全てのリンクを対象に */
    if (blnGetAll && !links.length){
        links = AD.self.all.tags("A");
    }

    /* 複数のウィンドウが開く時には常に非アクティブで */
    if (links.length >= 2){
        blnActive = false;
    }

    /* 選択部分のリンクを開く */
    var blnChkSelection = true;
    if (links.length){
        for (i = 0; i < links.length; i++){
            if (links[i].href && links[i].href.chkFilter()){
                if (strTmp.indexOf(links[i].href) == -1){
                    Slpnr.NewWindow(links[i].href, blnActive);
                    if (links[i].href == AD.self.activeElement.href){
                        blnChkSelection = false;
                    }
                    strTmp += links[i].href;
                    strTmp += " ";
                }
            }
        }
    }

    /* 選択部分が無かった場合、アクティブなリンクがあればそれを開く */
    if (!blnGetAll && blnChkSelection){
        if (AD.self.activeElement.href && AD.self.activeElement.href.chkFilter()){
            Slpnr.NewWindow(AD.self.activeElement.href, blnActive);
        }
    }
}

function chkFilter(){
    var regex;
    var strRegex = strFilter;
    if (blnRegex){
        regex = new RegExp(strRegex, "i");
        return (this.match(regex));
    }
    else {
        regex = w2r();
        return (this.match(regex));
    }

    /* ワイルドカードの場合 */
    function w2r(){
        strRegex = strRegex.replace(/^\s+/, "").replace(/\s+$/, "");
        strRegex = strRegex.replace(/\s+/g, "|");
        strRegex = strRegex.replace(/([^\w\*\?|])/g, "\\$1");
        strRegex = strRegex.replace(/\*/g, ".+");
        strRegex = strRegex.replace(/\?/g, ".");
        strRegex = "^(?:" + strRegex + ")$";
        return (new RegExp(strRegex, "i"));
    }
}

/* ActiveDocumentClass */
function ActiveDocument(){
    this.self = null;
    this.elementSyntax = "";
    ActiveDocument.prototype.getDocument = GetDocument;

    function GetDocument(objDoc){
        var strSyntax = "";
        try {
            while (objDoc.activeElement.tagName.match(/FRAME$/i)){
                for (i = 0; i < objDoc.all.tags(objDoc.activeElement.tagName).length; i++){
                    if (objDoc.activeElement == objDoc.all.tags(objDoc.activeElement.tagName).item(i)){
                        strSyntax += (".frames.item(" + i + ").document");
                    }
                }
                objDoc = objDoc.activeElement.contentWindow.document;
            }
            return true;
        }
        catch(error) {
            return false;
        }
        finally {
            this.self = objDoc;
            this.elementSyntax = strSyntax;
        }
    }
}

/* GetSelectedElement */
function GetSelectedElement(strTag){
    var htmlText, objSelectedElement;
    var objDoc = this.self;
    var thisArray = new Array();

    htmlText = objDoc.selection.createRange().htmlText;
    objSelectedElement = objDoc.createElement("DIV");
    objSelectedElement.innerHTML = htmlText;
    if (objSelectedElement.all.tags(strTag).length){
        for (i = 0; i < objSelectedElement.all.tags(strTag).length; i++){
            sleipnir.Sleep(1);
            thisArray.push(objSelectedElement.all.tags(strTag)(i));
        }
    }
    objSelectedElement = null;
    return thisArray;
}

- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- SaveCache.user.js 【Sleipnir用スクリプト全般】 - sk 10/17-17:31 No.684

  • Re: SaveCache.user.js 【Sleipnir用スクリプト全般】 - sk 10/17-17:40 No.685


- Web Forum -   Modified by isso