Javascript 无法使用JS OM将自定义web部件添加到页面

Javascript 无法使用JS OM将自定义web部件添加到页面,javascript,sharepoint-2010,Javascript,Sharepoint 2010,我正在尝试使用SharePoint 2010提供的新Javascipt OM添加一个自定义web部件(这是我自己编写的)。我的解决方案也在沙箱中运行 我已将其正确用于Content Editor Web部件(基于示例代码),但是,当我将Content Editor Web部件定义替换为用于我自己的Web部件的定义时,会出现以下错误: --------------------------- Message from webpage --------------------------- Reque

我正在尝试使用SharePoint 2010提供的新Javascipt OM添加一个自定义web部件(这是我自己编写的)。我的解决方案也在沙箱中运行

我已将其正确用于Content Editor Web部件(基于示例代码),但是,当我将Content Editor Web部件定义替换为用于我自己的Web部件的定义时,会出现以下错误:

---------------------------
Message from webpage
---------------------------
Request failed. The operation could not be completed because the Web Part is not on this page.
undefined
---------------------------
OK   
---------------------------
我测试过的东西:

  • 我可以成功地将我的.webpart定义上载到web部件库,并且web部件可以正常工作
  • 我可以成功地将web部件添加到我正在使用“上载web部件”功能以编程方式尝试添加它的页面中 这是我用来添加web部件的代码:

    function addWebPart(serverRelativeUrl) {
    //var webPartXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
    //webPartXml = webPartXml + "<WebPart xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://schemas.microsoft.com/WebPart/v2\">  <Title>Content Editor</Title>  <FrameType>Default</FrameType>  <Description>Allows authors to enter rich text content.</Description>  <IsIncluded>true</IsIncluded>  <ZoneID>Main</ZoneID>  <PartOrder>0</PartOrder>  <FrameState>Normal</FrameState>  <Height />  <Width />  <AllowRemove>true</AllowRemove>  <AllowZoneChange>true</AllowZoneChange>  <AllowMinimize>true</AllowMinimize>  <AllowConnect>true</AllowConnect>  <AllowEdit>true</AllowEdit>  <AllowHide>true</AllowHide>  <IsVisible>true</IsVisible>  <DetailLink />  <HelpLink />  <HelpMode>Modeless</HelpMode>  <Dir>Default</Dir>  <PartImageSmall />  <MissingAssembly>Cannot import this Web Part.</MissingAssembly>  <PartImageLarge>/_layouts/images/mscontl.gif</PartImageLarge>  <IsIncludedFilter />  <Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>  <TypeName>Microsoft.SharePoint.WebPartPages.ContentEditorWebPart</TypeName>  <ContentLink xmlns=\"http://schemas.microsoft.com/WebPart/v2/ContentEditor\" />  <Content xmlns=\"http://schemas.microsoft.com/WebPart/v2/ContentEditor\" />  <PartStorage xmlns=\"http://schemas.microsoft.com/WebPart/v2/ContentEditor\" /></WebPart>";
    
    var webPartXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
           "<webParts><webPart xmlns=\"http://schemas.microsoft.com/WebPart/v3\">" +
           "<metaData>" + 
           "<type name=\"Codezeven.Social.Views.WebParts.ItemViewTrackerWebPart, Codezeven.Social.Views, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c56ab109c2917056\" />" +
           "<importErrorMessage>Cannot import this Web Part.</importErrorMessage>" +
           "<Solution SolutionId=\"f5984dff-f7c0-4108-8c08-671bbb9b5df0\" xmlns=\"http://schemas.microsoft.com/sharepoint/\" />" +
           "</metaData>" +
           "<data><properties>" +
           "<property name=\"Title\" type=\"string\">ItemViewTrackerWebPart</property>" +
           "</properties></data>" + 
           "</webPart></webParts>";
    
    clientContext = new SP.ClientContext.get_current();
    var oFile = clientContext.get_web().getFileByServerRelativeUrl(serverRelativeUrl);
    
    var limitedWebPartManager = oFile.getLimitedWebPartManager(SP.WebParts.PersonalizationScope.shared);
    

    我不确定你是否修过这个,但我认为你有一个不必要的问题

    clientContext.load(oWebPart)

    就在executeQueryAsync之前


    如果您使用的是Firebug/Fiddler/IE9工具栏,请查看网络流量,ClientQuery的发布结果中会显示一些有用的错误消息。

    您是否曾经使用过该工具?我遇到了相同的错误消息。
    limitedWebPartManager.addWebPart(oWebPart, 'Main', 0);
    
    clientContext.load(oWebPart);
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));}
    
    function onQuerySucceeded() {
    
        alert('Web Part added: ' + oWebPart.get_title());
    }
    function onQueryFailed(sender, args) {
    
        alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
    }