1

私は、ユーザーのクリップボードに帰属リンクを追加するスクリプトを書いています。Tynt の機能と同様です。

機能的には、以下のスクリプトは正常に機能していますが、改行と書式設定が削除されています。少なくとも改行を維持する方法はありますか?

function addLinktoCopy() {

// Define tracking parameter
var trackingparam = "source=copypaste";

// Set document body as body_element variable
var body_element = document.getElementsByTagName('body')[0];

// Create a selection variable to store copied value
var selection;

// Populate selection variable with user's selected copy
selection = window.getSelection();

// Create a variable to store the selection length
var selectionlength;

// Convert the selection to a string and get the string's length
selectionlength = selection.toString().length

// If the selectionlength is >34, then append tracking
if ( selectionlength > 34 ){

    // Set the current page's URL as a variable
    var page = document.location.href;

    // Create a seperator variable
    var seperator;

    // Create a locationURL variable to store the URL and associated tracking parameters
    var locationURL;

    // Check to see if the URL already contains the tracking paramater
    // If the URL doesn't contain the tracking code, append it to the end
    if ( page.indexOf(trackingparam) == -1 ) {

        // Check to see if the URL already includes a ? in it
        if ( page.indexOf("?") != -1 ) {

            // If ? is present in the URL string, set seperator variable to &
            seperator = "&";        

        }

        else {

            // If ? is not present in the URL string, set seperator variable to ?
            seperator = "?";

        }

        // Set locationURL variable with URL + tracking code
        locationURL = document.location.href + seperator + trackingparam;

    }

    // Othwerise, the tracking code already exists in the URL string, so append nothing
    else {

        // Set the locationURL variable with the URL as is      
        locationURL = document.location.href;

    }

    // Build link to page with editorial copy, URL, seperator, and URL tracking parameters
    var pagelink = "<br/><br/>Read more at: "+ locationURL;

    // Create new variable with user's selection and page link
    var copytext = selection + pagelink;

    // Create a new div and add associated styling and hide it off the page
    var newdiv = document.createElement('div');

    // Append new div to document
    body_element.appendChild(newdiv);

    // Select text from the new (hidden) div
    newdiv.innerHTML = copytext;

    // Replace clipboard values with new selection + link value
    selection.selectAllChildren(newdiv);    

}

// Otherwise, selectionlength <= 34, so do nothing
// We are not appending any copy or URLs to the user's selection

}
4

1 に答える 1

1

少し調査した後、ここで何が起こっているのかを突き止め、改行を維持するように修正しました。選択範囲をコピーすると、改行が \n として表されていたようです。そのため、すべての \n インスタンスを HTML break に置き換えるロジックを追加した
ところ、問題が解決しました。更新されたスクリプト全体を次に示します。

function addLinktoCopy() {

// Define tracking parameter
var trackingparam = "source=copypaste";

// Set document body as body_element variable
var body_element = document.getElementsByTagName('body')[0];

// Create a selection variable to store copied value
var selection;

// Create a selection to store the selection as a text string
var selectedText;

// Populate selection variable with user's selected copy
selection = window.getSelection();

// Populate selectedText variable with the user's selected copy stored as a string
selectedText = selection.toString(); 

// Create a variable to store the selection length
var selectionlength;

// Convert the selection to a string and get the string's length
selectionlength = selection.toString().length

// If the selectionlength is >34 and doesn't start with "http://", then append tracking
// If the selection starts with "http://", it's likely a URL, which could provide for a bad experience when pasting into an address bar
if ( (selectionlength > 34) && (selectedText.substring(0,7) != "http://") ){

    // Set the current page's URL as a variable
    var page = document.location.href;

    // Create a seperator variable
    var seperator;

    // Create a locationURL variable to store the URL and associated tracking parameters
    var locationURL;

    // Check to see if the URL already contains the tracking paramater
    // If the URL doesn't contain the tracking code, append it to the end
    if ( page.indexOf(trackingparam) == -1 ) {

        // Check to see if the URL already includes a ? in it
        if ( page.indexOf("?") != -1 ) {

            // If ? is present in the URL string, set seperator variable to &
            seperator = "&";        

        }

        else {

            // If ? is not present in the URL string, set seperator variable to ?
            seperator = "?";

        }

        // Set locationURL variable with URL + tracking code
        locationURL = document.location.href + seperator + trackingparam;

    }

    // Othwerise, the tracking code already exists in the URL string, so append nothing
    else {

        // Set the locationURL variable with the URL as is      
        locationURL = document.location.href;

    }

    // Build link to page with editorial copy, URL, seperator, and URL tracking parameters
    var pagelink = "<br/><br/>Read more at: "+ locationURL;

    // Create new variable with user's selection and page link
    var copytext = selection + pagelink;

    // Replace line breaks /n with HTML break tags to quasi-preserve formatting on paste
    var copytext = copytext.replace(/\n/g, '<br />');

    // Create a new div and add associated styling and hide it off the page
    var newdiv = document.createElement("div");

    // Append new div to document
    body_element.appendChild(newdiv);

    // Select text from the new (hidden) div
    newdiv.innerHTML = copytext;

    // Replace clipboard values with new selection + link value
    selection.selectAllChildren(newdiv);

}

// Otherwise, selectionlength <= 34, so do nothing
// We are not appending any copy or URLs to the user's selection

}

// Execute addLinktoCopy function when user copies text from page
document.oncopy = addLinktoCopy;
于 2012-07-27T21:27:06.397 に答える