是否可以?...我想没有
不幸的是,无法通过提供程序托管的加载项添加带有 javascript 逻辑的自定义功能区操作。我认为您发现它的文章/链接可能是指服务器功能区 xml 自定义操作,该操作可以使用沙盒解决方案(如旧学校 SharePoint 日)进行修改,但现在 SP Online 不支持沙盒。
对于随加载项添加的功能区自定义操作,您应该指定直接链接。这已经是我们在 VS 中将 Ribbon 操作添加到 Add-in 项目时需要指定的内容(我们应该指定是否导航到)
我还发现了这篇 MSDN 文章(相当最新 - 从 2020 年开始),我们可能会在其中找到:
CustomAction 不能包含 JavaScript:任何 UrlAction 或 CommandAction 都必须是要导航到的 URL。(...)
所以我喜欢 95% 肯定这不应该 ......但我离开了 5%,因为我不像 SP PRO(我认为很难成为其中的一员,因为知道的太多了)
您可能采取的可能解决方案
您可能会做的是使用 PowerShell 添加自定义 Ribbion xml 并使用 PowerShell 将任何 javascript 逻辑附加到它。唯一的缺点是 javascript 文件还需要以某种方式添加到页面中(就像它可以存储在 SiteAssets 库中一样)。
所以要做到这一点,我们需要:
- 使用我们的功能区命令按钮在本地创建一个 xml 文件,例如:
<CommandUIExtension>
<CommandUIDefinitions>
<CommandUIDefinition Location="Ribbon.Library.ViewFormat.Controls._children">
<Button Id="Ribbon.Library.ViewFormat.About"
Command="TestButton"
LabelText="Test"
Image32by32="{SiteUrl}/_layouts/15/1033/Images/formatmap32x32.png?rev=23"
Image32by32Top="-273"
Image32by32Left="-1"
Description="Test"
TemplateAlias="o1" />
</CommandUIDefinition>
</CommandUIDefinitions>
<CommandUIHandlers>
<CommandUIHandler
Command="TestButton"
CommandAction="javascript:test({SelectedItemId});"
EnabledScript="javascript:checkOneItemSelected();" />
</CommandUIHandlers>
</CommandUIExtension>
上面的输出将是这样的按钮
- 接下来创建一个带有 CommandAction 和 EnabledScript 函数的 js 文件(也在本地)(所以我们需要一个 test() 函数和 checkOneItemSelected())。所以内容像
function test(itemId) {
alert(itemId);
}
function checkOneItemSelected() {
return (SP.ListOperation.Selection.getSelectedItems().length == 1)
}
...所以在本地我有两个文件
- 现在我们需要使用 PowerShell 连接到我们想要添加功能区按钮的站点(最好使用PnP Powershell)
- 使用连接到站点
Connect-PnPOnline -Url <SiteUrl>
- 现在让我们将 JS 本地文件添加到站点资产库中,例如
Add-PnPFile -Path .\customJS.js -Folder "SiteAssets"
所以输出是(库中的文件)
- 现在让我们将功能区按钮添加到站点(使用 xml),例如
$ribbon = Get-Content .\CustomRibbonButton.xml
$ribbon = [string]$ribbon
Add-PnPCustomAction -Name "RibbonTester" -Title "RibbonTester" -Description "-" -Group "Tester" -Location "CommandUI.Ribbon" -CommandUIExtension $ribbon -RegistrationType ContentType -RegistrationId 0x0101
所以上面的输出将是我们在功能区中的按钮(我们还需要打开经典 UI/关闭现代 UI,才能看到功能区)
- 现在让我们将我们的 JS 附加到按钮上,例如
Add-PnPJavaScriptLink -Name "AboutButtonScript" -Url https://tenanttocheck.sharepoint.com/sites/ClassicDeveloperSite/SiteAssets/customJS.js -Scope Web
请注意租户的更改 url
输出就像
你考虑过
您是否还考虑过使用 spfx 扩展和现代 UI 来更新?在扩展中,您可以使用 JS 并且可能对您希望使用 ids 数组定位的某个端点进行一些 http 请求(但这只是一个建议)
希望我的帖子对BR有帮助