Sharepoint 2013 - открыть результаты поиска в новом окне / вкладке
Итак, я боролся с этой проблемой уже несколько часов... Мне нужно изменить ссылки в результатах поиска, чтобы они открывались в новом окне / вкладке.
В частности, это результаты поиска, которые ссылаются на "off-site" -hit. Я создал копию Item_WebPage.html, но просто не могу заставить ее работать.
Я предполагаю, что есть какие-то асинхронные нагрузки, которые все портят.
Мой JS-код выглядит следующим образом:
var anchors = document.getElementsByClassName('ms-srch-item-link');
for (var i = 0; i < anchors.length; i++) {
anchors[i].setAttribute("target", "_blank");
}
}
Однако "якоря" всегда равны "0". Можно ли использовать функцию "sharepoint-document-ready-as-h*ll"? Я предполагаю, что моя проблема в том, что не весь контент загружается в DOM до того, как я запустил свой код...
3 ответа
Это слишком долго, и вы, возможно, решили это.
Я искал то же самое и добавил - target="_blank" к тегу привязки в пользовательском шаблоне отображения
В SharePoint онлайн это отлично работает для меня, но относится ко всем результатам.
Используя SharePoint Designer, обновите шаблон отображения Item_CommonItem_Body.html из _catalogs/masterpage/display templates/search.
Поиск по нижней строке:var titleHtml = String.format('<a clicktype="{0}" id="{1}" href="{2}" class="ms-srch-item-link" title="{3}" onfocus="{4}" {5} >{6}</a>',
и заменить его на:var titleHtml = String.format('<a clicktype="{0}" id="{1}" href="{2}" class="ms-srch-item-link" title="{3}" onfocus="{4}" {5} target="_blank">{6}</a>',
Сохраните изменения и из библиотеки главных страниц браузера опубликуйте основную версию. При поиске сейчас результаты должны открываться в новых вкладках, хотя вам может потребоваться снова загрузить кэш страниц (CTRL+F5).
Пользовательский шаблон отображения - это хороший способ изменить поведение результатов поиска. Я использовал код JQuery, чтобы убедиться, что внешние ссылки всегда загружаются в новом окне:
<script type="text/javascript">
if (window.jQuery) {
$(window).load(function () {
// Open external links in a new tab
var url = '://' + window.location.hostname;
// get the current website name, and i add :// to make sure we're looking at the right name //
url = url.toLowerCase(); // lowercase everything to compare apples to apples
$("a").each(function () {
var link = this; // assign the link object to another variable for easier managability
var linkHref = link.href.toLowerCase(); // lower case it
if (linkHref.indexOf(url) < 0 && linkHref.indexOf('javascript:') < 0) { // check to see if this A object has this domain in it and make sure it's not a javascript call
link.target = '_blank'; // change the target to be in the new window
} if (linkHref.indexOf('.pdf') > 0) { // check to see if this is a PDF
link.target = '_blank'; // change the target to be in the new window
$(link).removeAttr("onclick"); //remove the SP click event
} if (linkHref.indexOf('/forms/') > 0 && linkHref.indexOf(').aspx') > 0) { //check for links in the forms library
link.target = '_blank'; // change the target to be in the new window
$(link).removeAttr("onclick"); //remove the SP click event
}
});
});
}
</script>