Sharepoint,ajax和页面标题

时间:2008-11-28 10:39:55

标签: ajax sharepoint moss

我遇到了sharepoint和ajax功能的奇怪问题。我们在webpart中放置了一个UpdatePanel。发生部分回发时,页面标题会丢失。

我们发现临时的部分解决方案是将title元素写入一行而不使用其中的任何空格或控件。甚至不是文字控件。

但我们需要某种方法为所有页面提供sommon标题,因此标题看起来像这样: 我的默认标题 - 当前页面标题

任何想法如何解决这个问题?

5 个答案:

答案 0 :(得分:5)

我以为我会分享我对这个棘手问题的解决方案。我最终做的就是抛弃我放在下面放在一起的这个方便的小脚本。您可以将其放在自定义页面布局或自定义母版页中。它的工作原理是连接AJAX事件处理程序以在AJAX更改之前获取标题,然后使用上面的Darpy代码重新应用它。这样可以始终显示正确的页面标题。

<script type="text/javascript">

// This script is to fix the issue where AJAX causes SharePoint 
// publishing pages to sometimes make the page title something 
// whacky. 
var app = Sys.Application;
var origTitle = "";
app.add_init(SPCustomAppnInit);


function SPCustomAppnInit(sender) {
  origTitle = document.title; // grab the original title.
  var prm = Sys.WebForms.PageRequestManager.getInstance();
  if (!prm.get_isInAsyncPostBack())
  {
 prm.add_pageLoaded(SPCustomPageLoaded); // wire up loaded handler.
  }
}

function SPCustomPageLoaded(sender, args) {

 document.title = origTitle; // put the original title back on the document.
}

<script>

答案 1 :(得分:3)

我没有对新闻组帖子的引用,但这是发布页面的已知问题,如drax所述。我过去使用的解决方法是在页面上硬编码标题 - 丢失的元数据标题是错误的一部分。

当无法进行硬编码时,我使用了javascript来更改页面标题:document.title =“title fixup here”;

据说微软计划在下一个sharepoint版本中解决这个问题。

答案 2 :(得分:3)

我意识到这已经得到了解答,但我要投入我的$ .02。似乎问题由于两个条件而表现出来:(1)使用AJAX异步回发和(2)具有多行&lt; title&gt; &lt; head&gt;中的元素页面。

检查您的母版页。如果它有类似的东西:

<title>
<sharepointwebcontrols:listitemproperty property="Title" ...>
</title>

...然后将其改为一行,如下所示:

<title><sharepointwebcontrols:listitemproperty property="Title" ...></title>

问题解决了。不需要javascript。

答案 3 :(得分:0)

这看起来像纯粹的sharepoint的问题..而且看起来只是基于发布页面布局的网站受到影响。

我在firebug中调试了响应,并且由于某种原因它返回了页面标题的设置,因此来自服务器的响应不仅包含更新面板信息,还包含空页面标题。

我调试了我们的网站部分,但没有一部分使用网页标题。我建议不要使用发布或不使用标题内的任何控件。

我们目前正在为我工​​作的公司工作,所以当我们弄明白时,我会上传你的发现。

答案 4 :(得分:0)

在我的Web部件用户控件的开头添加以下@修复了问题

<script type="text/javascript"> 

// This script is to fix the issue where AJAX causes SharePoint  
// publishing pages to sometimes make the page title something  
// whacky.  
var app = Sys.Application; 
var origTitle = ""; 
app.add_init(SPCustomAppnInit); 


function SPCustomAppnInit(sender) { 
  origTitle = document.title; // grab the original title. 
  var prm = Sys.WebForms.PageRequestManager.getInstance(); 
  if (!prm.get_isInAsyncPostBack()) 
  { 
 prm.add_pageLoaded(SPCustomPageLoaded); // wire up loaded handler. 
  } 
} 

function SPCustomPageLoaded(sender, args) { 

 document.title = origTitle; // put the original title back on the document. 
} 

</script> 

感谢ALOT:D