这是怎么发生的?
发生这种情况是因为SharePoint 2010在Internet Explorer中以兼容模式运行,以确保所有加载项都能正常工作。兼容模式模拟Internet Explorer 8,该模块尚未引入对Object.defineProperty
的支持。
你能做些什么呢?
您可以更新相关的母版页以强制浏览器以边缘模式呈现,但这可能会导致内置SharePoint功能出现不受欢迎的问题。
最好的路线是在代码调用之前检查Object.defineProperty
的存在性,并在不可用时使用不同的方法。
这里有一对夫妇的其他方法,但我敢肯定还有其他的方法:
使用对象构造当你定义你的对象作为构造函数来定义访问/突变功能
,只有您使用this
关键字定义的变量才能作为从该构造函数创建的对象的公共成员访问。任何由var
关键字定义的变量都将被抛弃,除非它们被构造函数中的任何函数引用,在这种情况下,它们的引用将被闭包围绕,从而使它们像私有成员一样行事。
var person = function(first,last){
var firstname = first || "Bob"; // private member
var lastname = last || "Smith"; // private member
this.getName = getFullName; // public member
function getFullName(){
return firstname + " " + lastname;
}
}
var john = new person("John","Deere");
alert(john.getName()); // "John Deere"
alert(john.firstname); // undefined
这有一些相当大的缺点,其中最明显的就是,你滑入构造函数的函数定义在内存中得到复制的每个对象创建使用构造。
输入原型办法...
使用对象原型的函数定义附加到您的对象类
了更大的内存友好的方法是只在构造函数中定义的变量,然后附加对象原型的任何必要的成员函数,以便函数只定义一次,无论您创建了多少个实例。
这种方法的缺点是,在构造函数外部定义的函数将无法访问其范围内定义的“私有”变量,因此您必须使用关键字this
来定义它们。
var person = function(first,last){
this.firstname = first || "Bob"; // public member
this.lastname = last || "Smith"; // public member
}
// attach the getName() function to the prototype:
person.prototype.getName = function(){
return this.firstname + " " + this.lastname;
}
var jane = new person("Jane","Doe");
alert(jane.getName()); // "Jane Doe"
alert(jane.firstname); // "Jane";
如何更新相关的masterpage?会发生什么问题? – Mano
您需要从网站集的主页面库中编辑主页面。 (这可以使用记事本或SharePoint Designer来完成。)您可以导航到/_layouts/changesitemasterpage.aspx以查看当前应用的母版页。在主页中,在'
'标签之间,您需要在任何其他标签之前添加'。 – Thriggle在边缘模式下遇到的问题主要围绕与Office交互或使用Office DLL功能的功能,例如在Excel或Word中打开文档,将列表导出到Excel,查看列表或库数据表视图等。您可能还会遇到色带问题。 – Thriggle