0

我在 CRM 2011(编辑:rollup 13)中工作,并且我为功能区编写了一个小(开发)帮助程序,它在模式弹出窗口中显示当前记录的 ID(在任何较重的库上使用picoModal ,所以我可以嵌入脚本)。

无论如何,CRM中的某些东西(脚本或其他)阻止了全局级别的文本选择,使我的弹出窗口几乎毫无用处,我已经尝试覆盖最明显的可以在我的弹出窗口中禁用文本选择的内容,包括设置所有浏览器特定-foo-user-select: text;css 属性,我已经重置了 unselectable 属性,甚至尝试将 onselectstart 事件重置为 not return false;应该应用它,因为弹出窗口将由 picoModal 动态构建)。

picoModal(entityName + ":<div id='info-region' unselectable='off' onselectstart='return true;'  style='user-select: text; -ms-user-select: text; -webkit-user-select: text; -khtml-user-select: text; -moz-user-select: text; -o-user-select: text;'><code><pre>" + str + "</pre></code></div><i>(press [CTRL]+[C] to copy the " + entityName + " entities ID to the clipboard)</i>");

除了我无法在弹出窗口中选择文本的主要问题之外,作为一个技巧,为了简化复制重要数据,我使用一些代码来选择str有效负载中的相关文本,以便可以轻松复制它(我从 SO 中抄袭,不要'没有链接了,但如果你知道请引用作者):

function selectText(entity) {
    var doc = document;
    var text = doc.getElementById(entity);

    if (document.body.createTextRange) { // ms
        var range = document.body.createTextRange();
        range.moveToElementText(text);
        range.select();
    } else if (window.getSelection) { // moz, opera, webkit
        var selection = window.getSelection();
        var range = doc.createRange();
        range.selectNodeContents(text);
        selection.removeAllRanges();
        selection.addRange(range);
    }
}

该代码在测试页面(跨浏览器)中有效,但在 Internet Explorer 中上传到 CRM 2011 后,模式弹出窗口中的所有文本都无法选择,而在 Firefox 中,文本是可选的,但所选范围在时间上没有焦点它显示给用户,所以我假设必须有一些我没有想到的限制文本选择的方法,或者我没有正确覆盖已知方法之一。

4

2 回答 2

2

您可以添加“ms-crm-Field-Data-Print”类以使文本可选择。要为整个页面启用文本选择,请设置 "window._UI_TEXT_SELECTABLE = "1";" 在 JavaScript 中。

http://blog.customereffective.com/blog/2014/05/selectable-text-on-crm-web-resources-with-clientglobalcontext.html

于 2014-05-02T15:45:24.700 回答
1

一种可能的解决方案是使用 atextarea来保存str变量

只需picoModal这样调用:

picoModal(entityName + "<textarea id='guidarea' readonly rows='1'>" + str + "</textarea><i>(press [CTRL]+[C] to copy the " + entityName + " entities ID to the clipboard)</i>");
document.getElementById('guidarea').focus(); // necessary for Google Chrome
document.getElementById('guidarea').select();

并且因为textareaselect()功能足以在多个浏览器中选择文本(使用 IE 9、Chrome 27、Firefox 21 测试)

于 2013-05-28T11:16:18.667 回答