处理程序中可以自定义操作按钮 运行 javascript 吗? Sharepoint 加载项
Can Custom Action Buttons run javascript in handler? Sharepoint add-in
我为在线共享点创建了一个自定义操作功能区按钮,我想在单击该按钮时 运行 一个 javascript 代码。
Sharepoint 文档甚至提供了一个示例:https://docs.microsoft.com/en-us/sharepoint/dev/schema/commanduihandler-element?redirectedfrom=MSDN#example
但是当我尝试时总是 returns 错误自定义操作 url 必须以“http:”、“https:”、“~appWebUrl”或“~remoteAppUrl”开头。
那么我该如何让它发挥作用呢?不可能了,只能做重定向?
还是取决于位置?我将其定义为 <CommandUIDefinition Location="Ribbon.Documents.Actions.Controls._children">
,因此它显示在命令栏中。
可能吗? ...我想没有
遗憾的是,无法通过 javascript 逻辑和提供商托管的加载项添加自定义功能区操作。我认为您发现的 articles/links 可以参考服务器功能区 xml 自定义操作,可以使用沙盒解决方案(如旧学校 SharePoint days)进行修改,但现在不支持沙盒在 SP 在线。
对于使用加载项添加的功能区自定义操作,您应该指定直接 link。这已经是我们在 VS 中向 Add-in 项目添加功能区操作时需要指定的内容(我们应该指定我们导航到的位置)
我还找到了 this MSDN article(最新的 - 从 2020 年开始)我们可能会发现:
CustomAction cannot contain JavaScript: Any UrlActions or CommandActions must be a URL to navigate to. (...)
所以我有 95% 的把握 应该 不可能...但我保留 5% 因为我不是像 SP PRO(我认为很难成为一个 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>
上面的输出将是一个像这样的按钮
- 接下来创建一个 js 文件(也在本地),其中包含 CommandAction 和 EnabledScript 的函数(因此我们需要一个 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 请求(但这只是一个建议)
希望我的 post 能帮到您
BR
我为在线共享点创建了一个自定义操作功能区按钮,我想在单击该按钮时 运行 一个 javascript 代码。
Sharepoint 文档甚至提供了一个示例:https://docs.microsoft.com/en-us/sharepoint/dev/schema/commanduihandler-element?redirectedfrom=MSDN#example
但是当我尝试时总是 returns 错误自定义操作 url 必须以“http:”、“https:”、“~appWebUrl”或“~remoteAppUrl”开头。
那么我该如何让它发挥作用呢?不可能了,只能做重定向?
还是取决于位置?我将其定义为 <CommandUIDefinition Location="Ribbon.Documents.Actions.Controls._children">
,因此它显示在命令栏中。
可能吗? ...我想没有
遗憾的是,无法通过 javascript 逻辑和提供商托管的加载项添加自定义功能区操作。我认为您发现的 articles/links 可以参考服务器功能区 xml 自定义操作,可以使用沙盒解决方案(如旧学校 SharePoint days)进行修改,但现在不支持沙盒在 SP 在线。
对于使用加载项添加的功能区自定义操作,您应该指定直接 link。这已经是我们在 VS 中向 Add-in 项目添加功能区操作时需要指定的内容(我们应该指定我们导航到的位置)
我还找到了 this MSDN article(最新的 - 从 2020 年开始)我们可能会发现:
CustomAction cannot contain JavaScript: Any UrlActions or CommandActions must be a URL to navigate to. (...)
所以我有 95% 的把握 应该 不可能...但我保留 5% 因为我不是像 SP PRO(我认为很难成为一个 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>
上面的输出将是一个像这样的按钮
- 接下来创建一个 js 文件(也在本地),其中包含 CommandAction 和 EnabledScript 的函数(因此我们需要一个 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 请求(但这只是一个建议)
希望我的 post 能帮到您 BR