相关疑难解决方法(0)

如何使用JavaScript复制到剪贴板?

将文本复制到剪贴板的最佳方法是什么?(多浏览器)

我试过了:

function copyToClipboard(text) {
    if (window.clipboardData) { // Internet Explorer
        window.clipboardData.setData("Text", text);
    } else {  
        unsafeWindow.netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");  
        const clipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);  
        clipboardHelper.copyString(text);
    }
}
Run Code Online (Sandbox Code Playgroud)

但在Internet Explorer中,它会出现语法错误.在Firefox中,它说unsafeWindow is not defined.

没有闪存的好技巧:Trello如何访问用户的剪贴板?

javascript clipboard copy-paste

3131
推荐指数
40
解决办法
170万
查看次数

jQuery - 从textarea中选择所有文本

当你在textarea里面点击时,我怎么能这样做,它的整个内容都被选中了?

最后再次点击时,取消选择它.

javascript forms jquery textarea selection

127
推荐指数
5
解决办法
11万
查看次数

如何在单击后以编程方式将异步依赖内容复制到剪贴板?

我正在尝试以编程方式使用Chrome(Build 43)中的execCommand将异步JSONP请求的结果复制到剪贴板.这是一个逻辑片段:

loadContent()

function loadContent(callback) {
  $.getJSON('http://www.randomtext.me/api/lorem/p-5/10-20?&callback=myFunc',function(result){
    console.log('result=',result.text_out);
    $("#container").html(result.text_out);
    if (callback) {
      callback();
    }
  });
}

function copyAjax() {

 loadContent(copy);

}

function copy() {
  var copyDivText = $('#container').text();
  console.log('copyDivText=',copyDivText);
  executeCopy(copyDivText);
}

document.addEventListener("DOMContentLoaded", function(){
      document.getElementById("copy").onclick = copy;
    });


document.addEventListener("DOMContentLoaded", function(){
      document.getElementById("copyAjax").onclick = copyAjax;
    });


// Copy text as text
function executeCopy(text) {
    var input = document.createElement('textarea');
    document.body.appendChild(input);
    input.value = text;
    input.focus();
    input.select();
    document.execCommand('Copy');
    input.remove();
}
Run Code Online (Sandbox Code Playgroud)

我知道你开始编译的43代Chrome使用execCommand和剪贴板.但问题是,您需要在执行用户发起的事件(其中权限被提升)中执行此操作.这是ZeroClipboard基于闪存的解决方案所具有的类似限制.除了得到一个不可能的答案(这是我现在正在思考的问题)之外,这些是我想做的其他选择(警告,它们都是Hail Mary Passes):

  1. 由于JSONP不能同步,因此将其转换为使用常规AJAX调用的内容,并确保AJAX调用在用户事件的执行上下文中是同步的.这违背了我根深蒂固的信念,即我们不应该进行同步XHR调用,因为它会降低用户体验.
  2. 当用户使用鼠标接近复制按钮时,我们会抢先发送服务器请求,并希望在用户单击按钮之前足够快.这是一个明显的竞争条件,可能不是时间的一部分,并且当用户想要执行Ctrl/Command-C而不是单击复制按钮时将无法确定.
  3. 执行两个步骤.单击以触发呼叫,当内容可用时,显示内容可用的消息,然后再次单击消息区域以复制到剪贴板.它似乎不是最好的UX互动.我用这个替代方法创建了这个例子.以编程方式触发单击不构成用户问题事件.
  4. 可能有一种方法可以创建简单的Chrome扩展程序,并允许用户将该扩展程序的权限设置为复制到剪贴板.这涉及但最终用户必须安装和扩展并更改本地浏览器设置.不确定很多用户是否有能力/愿意这样做.

我已经看过成问题,#2,如 …

javascript ajax clipboard zeroclipboard

12
推荐指数
1
解决办法
3171
查看次数

execCommand('copy')在Ajax/XHR回调中不起作用?

(使用Chrome 44测试)

期望的行为:发出XHR请求,将结果放入文本区域,选择文本,然后复制到剪贴板.

实际行为:成功的XHR请求后,将结果放入文本区域并选择它,但无法将结果复制到剪贴板.但是,如果我在XHR回调之外启动副本,它就可以工作.

示例html页面:

var selectAndCopy = function() {
  // Select text
  var cutTextarea = document.querySelector('#textarea');
  cutTextarea.select();
  // Execute copy
  var successful = document.execCommand('copy');
  var msg = successful ? 'successful' : 'unsuccessful';
  console.log('Cutting text command was ' + msg);
};

var fetchCopyButton = document.querySelector('#fetch_copy');
fetchCopyButton.addEventListener('click', function(event) {
  var xhr = new XMLHttpRequest();
  xhr.open('get', 'http://httpbin.org/ip');
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
      if (xhr.status === 200) {
        // Set text
        var textarea = document.querySelector('#textarea');
        textarea.value = …
Run Code Online (Sandbox Code Playgroud)

html javascript ajax copy execcommand

8
推荐指数
2
解决办法
4285
查看次数

如何创建一个获取外部资源的按钮并将其复制到剪贴板?

所以我有一个按钮,它应该创建一个奇特的共享URL,使用goo.gl缩短它,然后将其复制到剪贴板.好消息是,我已经成功完成了所有这些,但并非一下子全部完成.

问题源于规范:

从document.execCommand()触发的复制命令只会影响真实剪贴板的内容,前提是从用户信任和触发的事件调度事件,或者实现配置为允许此事件.如何配置实现以允许对剪贴板的写访问超出了本规范的范围.

execCommand非官方W3C规范

所以看起来这可能不起作用......

你看,为了缩短URL,我需要进行一次AJAX调用.我只在用户点击分享按钮时才这样做,因为我每天有1,000,000个限制缩短(如果我每次更改页面时都生成一个新的共享URL,那么一个用户很容易就会有1,000个新的URL,所以我' d限制为最多1,000个最终用户:不是最佳选择).但这意味着我必须从发起事件的线程之外的线程中侦听AJAX事件,从而有效地失去了所需的这种祝福状态execCommand('copy').

有没有办法让一个单一的按钮同时生成goo.gl URL,然后将所说的短URL复制到剪贴板?

作为参考,这是我写的(Kotlin/JS)这里的JavaScript输出.
这是一个SSCCE,说明它应该如何工作,但不是(基于陈杨华的答案).

javascript clipboard dom-events goo.gl execcommand

5
推荐指数
1
解决办法
200
查看次数

document.execCommand复制命令不起作用或其他解决方案?

我正在做的是以编程方式从网页中选择所有文本,然后将其复制。全选功能适用,execCommand但复制功能无效。

这是我的代码:

$.ajax({
    url: $('#url').val(),
    type: 'GET',
    success: function(res) {
        $('#result').html(res.responseText);
        $('#result').fadeIn('fast');


        $('#result').focus();
        $('#result').select();

        document.execCommand('selectall');

        // copy does not work ?
        document.execCommand('copy');

    }
});
Run Code Online (Sandbox Code Playgroud)

这是关于JsBin的示例

我也尝试使用Flash解决方案,例如ZeroClipboard,但是似乎必须显式地按下其Flash对象/按钮才能复制文本,而我想这样做zeroclip.setText('whatever'); 而无需用户按下按钮。

谁能告诉我如何以编程方式复制文本?

javascript browser cross-browser

4
推荐指数
1
解决办法
7600
查看次数