tinymce 3.x advlink 插件 - 设置链接默认在新 window/tab 中打开
tinymce 3.x advlink plugin - set links to open in new window/tab by default
使用 advlink 插件,"target" 的默认值为“_self”(即链接在同一个 window/tab 中打开)。我怎样才能使链接默认在新 window/tab 中打开?
我们需要对 [yourTinymcePluginsDirectory]/advlink/js/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>';
瞧,就是这样。是吗?没有!
虽然这确实有效,但如果我们尝试将 link 的目标更改回 _self
,虽然 HTML 确实会正确更新,但下拉列表会错误地显示_blank
选项作为 selected。发生这种情况是因为当 selecting _self
选项时 target
Tinymce 属性没有更新为 _self
而是更新为 "" - 所以是一个空字符串。因此,当 selecting _self
脚本将尝试查找名为 "" 的属性时,当然会找到 none,因此默认情况下它将 select 第一个选项.虽然这在第一个选项是 _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
是默认目标选项。
使用 advlink 插件,"target" 的默认值为“_self”(即链接在同一个 window/tab 中打开)。我怎样才能使链接默认在新 window/tab 中打开?
我们需要对 [yourTinymcePluginsDirectory]/advlink/js/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>';
瞧,就是这样。是吗?没有!
虽然这确实有效,但如果我们尝试将 link 的目标更改回 _self
,虽然 HTML 确实会正确更新,但下拉列表会错误地显示_blank
选项作为 selected。发生这种情况是因为当 selecting _self
选项时 target
Tinymce 属性没有更新为 _self
而是更新为 "" - 所以是一个空字符串。因此,当 selecting _self
脚本将尝试查找名为 "" 的属性时,当然会找到 none,因此默认情况下它将 select 第一个选项.虽然这在第一个选项是 _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
是默认目标选项。