1

使用 advlink 插件,“target”的默认值为“_self”(即链接在同一窗口/选项卡中打开)。如何使链接默认在新窗口/选项卡中打开?

4

1 回答 1

0

我们需要对advlink.js位于[yourTinymcePluginsDirectory]/advlink/js/advlink.js.

找到以下部分:

    function getTargetListHTML(elm_id, target_form_element) {

        var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';');
        var html = '';

        html += '<select id="' + elm_id + '" name="' + elm_id + '" onchange="this.form.' + target_form_element + '.value=';
        html += 'this.options[this.selectedIndex].value;">';
        html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>';
        html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>';
        html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>';
        html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>';

我们需要改变选项的顺序。所以只需将“_blank”选项放在顶部:

        html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>';
        html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>';
        html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>';
        html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>';

瞧,就是这样。是吗?不!

尽管这确实可行,但如果我们尝试将链接的目标更改回_self,虽然 HTML 确实会正确更新,但下拉菜单会错误地将_blank选项显示为选中。发生这种情况是因为选择_self选项时, targettinymce属性不会更新为_self“” - 因此一个空字符串。因此,在选择_self脚本时会尝试查找名为“”的属性,当然会找不到,因此默认会选择第一个选项。虽然这在第一个选项是时有效,但当不是第一个选项_self时它将不起作用。_self

为了解决这个问题,我们需要告诉脚本,当目标 Tinymce 属性设置为空字符串时,它应该寻找名为的属性_self。这样,即使它不是第一个选项,它也能找到它。

为了实现这一点,我们还需要对脚本的行为再做一次更改。找到以下行:

selectByValue(formObj, 'targetlist', inst.dom.getAttrib(elm, 'target'), true);

并将其替换为:

    var target_value = inst.dom.getAttrib(elm, 'target');
    if (inst.dom.getAttrib(elm, 'target') == ""){
        target_value = "_self";
    }//end if

    selectByValue(formObj, 'targetlist', target_value, true);

现在一切都应该完美运行,_blank成为默认目标选项。

于 2018-02-15T16:26:17.493 回答