نسخه مخفی به کلیپبورد با استفاده از تابع جاوااسکریپت در کروم و فایرفاکس؟


بهروزرسانی

به نظر میرسد مرورگرها در حال شروع به پشتیبانی از کپی به صورت بومی در JS هستند

در پنجرههای کنسول هر دو مرورگر کروم و فایرفاکس در مک میتوانم اجرا کنم

copy("party in your clipboard!");

و متن به کلیپبورد من کپی میشود. من در SO و گوگل جستجو کردهام و به نظر نمیرسد چیزی در این مورد پیدا کنم.

  • آیا اینها مخصوص هر مرورگر هستند؟
  • کجا میتوانم اطلاعات بیشتری در مورد این توابع جاوااسکریپت پیدا کنم؟

نسخههای مرورگر:

جاوااسکریپت که هنگام اجرای 'copy' از کنسول کروم بازگردانده شد

function (object)
    {
        if (injectedScript._type(object) === "node") {
            var nodeId = InjectedScriptHost.pushNodePathToFrontend(object, false, false);
            InjectedScriptHost.copyNode(nodeId);
        } else
            InjectedScriptHost.copyText(object);
    }
  • این کد چه معنایی دارد؟

اینجا ۲ اسکرینشات از اجرای عملکرد کپی در کنسول کروم با تمام افزونههای کروم غیرفعال آورده شده است

پاسخ شماره ۱

من فکر میکنم اینها توابع کنسول از پیش تعریفشدهی Firebug هستند - حداقل به نظر میرسد این مورد برای Firebug صادق باشد. اگر مثلاً سعی کنید window.copy را فراخوانی کنید، هشداری دربارهی تعریفنشده بودن تابع دریافت خواهید کرد، بنابراین قطعاً یک تابع مرورگر نیست و نمیتوان از آن در فایلهای معمولی جاوااسکریپت استفاده کرد. به نظر میرسد توابع زیر نیز در کنسول جاوااسکریپت کار میکنند، بعد از کمی بازی کردن با آن:

  • پاککن()
  • profile()

اجرای اینها در کنسول کروم، منبع پشت این توابع را در کنسول وبکیت نشان میدهد:

> profile
function ()
{
return console.profile.apply(console, arguments)
}

> clear
function ()
{
InjectedScriptHost.clearConsoleMessages();
}

> copy
function (object)
{
if (injectedScript._type(object) === "node")
object = object.outerHTML;
InjectedScriptHost.copyText(object);
}

در حالی که سورس فایرباگ همچنین یک لیست از توابع را تعریف میکند:

this.clear = function()  // no web page interaction
{
    Firebug.Console.clear(context);
};

this.inspect = function(obj, panelName)  // no web page interaction
{
    Firebug.chrome.select(obj, panelName);
};

this.keys = function(o)
{
    return FBL.keys(o);  // the object is from the page, unwrapped
};

this.values = function(o)
{
    return FBL.values(o); // the object is from the page, unwrapped
};

// etc...

پاسخ شماره ۲

پاسخ مدرن

امروزه میتوانید از API جدیدی که در مرورگرهای مختلف کار میکند استفاده کنید، میتوانید یک ورودی متنی مخفی در DOM اضافه کنید، آن را انتخاب کنید و سپس document.execCommand('copy'); را اجرا کنید

مرجع: https://developer.chrome.com/blog/cut-and-copy-commands/

زمانهای پاسخ قدیمی

در اینجا میتوانید دستور کپی مرجع ابزارهای توسعه کروم را ببینید: https://developers.google.com/web/tools/chrome-devtools/console/utilities#copy

شما نباید از این دستورات در مرورگرهای واقعی JS استفاده کنید (فقط برای دیباگ کردن در کنسول به نوعی).