3

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

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

但是我们需要一些方法来为所有页面提供 sommon 标题,所以标题看起来像这样:我的默认标题 - 当前页面标题

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

4

5 回答 5

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>
于 2009-01-19T17:17:17.293 回答
3

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

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

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

于 2008-12-01T15:09:33.697 回答
3

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

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

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

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

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

问题解决了。不需要javascript。

于 2010-11-10T20:04:42.407 回答
0

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

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

我调试了我们的 Web 部件,但它们都没有使用页面标题。我建议不要使用发布或不使用标题内的任何控件。

我们目前正在我工作的公司处理这个问题,所以当我们弄清楚一些事情时,我会上传你的发现。

于 2008-12-01T14:20:59.910 回答
0

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

<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> 

非常感谢:D

于 2010-03-20T21:24:06.130 回答