我遇到了sharepoint和ajax功能的奇怪问题。我们在webpart中放置了一个UpdatePanel。发生部分回发时,页面标题会丢失。
我们发现临时的部分解决方案是将title元素写入一行而不使用其中的任何空格或控件。甚至不是文字控件。
但我们需要某种方法为所有页面提供sommon标题,因此标题看起来像这样: 我的默认标题 - 当前页面标题
任何想法如何解决这个问题?
答案 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