После тонны обхода SharePoint JS в отладчике я наконец нашел способ предотвратить эту проблему.
В SharePoint 2010:
//Set focus on our list web part
var webPart = document.getElementById('WebPartWPQ1');
WpClick({target: webPart});
//Prevent it from losing focus
SP.Ribbon.WebPartComponent.$3_1.deselectWebPartAndZone = function() { };
В бета-версии SharePoint 2013:
//Set focus on our list web part
var webPart = document.getElementById('MSOZoneCell_WebPartWPQ2');
WpClick({target: webPart});
//Prevent it from losing focus
SP.Ribbon.WebPartComponent.$3.deselectWebPartAndZone = function() { };
Примечание : Это супер-хакерский и находится вMicrosoft никак не поддерживается (таким образом, вполне вероятно, что он изменится в будущей версии или, возможно, даже в окончательной первоначальной версии SharePoint 2013).
Также обратите внимание, что идентификаторы вашей веб-части, вероятно, будут другими, поэтому вам следует дважды проверить, что вы уделяете внимание правильной веб-части.
Объяснение: Он в основном перекрывает экземплярSP.Ribbon.WebPartComponent
способность отменить выбор веб-части.Из того, что я могу сказать, свойство $ 3 / $ 3_1 хранит ссылку на экземпляр SP.Ribbon.WebPartComponent
.
Если кто-нибудь знает лучший способ получить доступ к экземпляру SP.Ribbon.WebPartComponent
, кроме $ 3 / $ 3_1свойство, пожалуйста, говорите, так как это сделало бы этот метод гораздо более надежным.