When we build a SharePoint hosted app, all pages and other resources are served by SharePoint from within the app web. For this reason, SharePoint hosted apps automatically inherit the look and feel of the host web and present custom functionality within the familiar SharePoint environment.
This inheritance is not automatic when we create a remote hosted app because the remote web is served from outside the SharePoint environment. There is no requirement to ensure that your remote web looks like the host web but a similar look and feel reassures users, positions familiar links and controls where users expect them, and can ease the adoption of your apptime.
Steps to add host web master page to app pages
1. To use the Chrome Control, copy the sp.ui.controls.js
JavaScript library into your remote web project.
3. Add ChromeLoader.js to appweb project and provide the reference to each page in app
4. Add following div element to .aspx page
Best Practice:
Use the Chrome Control whenever you want your app to blend
with the host web's look and feel.
You
cannot be sure that the host web will always use the familiar SharePoint look
and feel so, if you hard-code the usual SharePoint design into your app, the app
may not look like the customer's host web. The Chrome Control avoids this
problem by downloading the style sheet and headers elements from the host web
at run time.
Code:
ChromeLoader.js
var hostweburl;
//load
the SharePoint resources
$(document).ready(function () {
//Get
the URI decoded URL.
hostweburl =
decodeURIComponent(
getQueryStringParameter("SPHostUrl")
);
// The
SharePoint js files URL are in the form:
//
web_url/_layouts/15/resource
var scriptbase = hostweburl + "/_layouts/15/";
// Load
the js file and continue to the
// success handler
$.getScript(scriptbase + "SP.UI.Controls.js", renderChrome)
});
//Function
to prepare the options and render the control
function renderChrome() {
// The
Help, Account and Contact pages receive the
// same query string parameters as the main
page
var options = {
"appIconUrl": "siteicon.png",
"appTitle": "My Reports",
//"settingsLinks":
[
// {
// "linkUrl":
"Account.html?"
// +
document.URL.split("?")[1],
// "displayName": "Account
settings"
// },
// {
// "linkUrl":
"Contact.html?"
// +
document.URL.split("?")[1],
// "displayName": "Contact
us"
// }
//]
};
var nav = new SP.UI.Controls.Navigation(
"chrome_ctrl_placeholder",
options
);
nav.setVisible(true);
}
//
Function to retrieve a query string value.
//
For production purposes you may want to use
// a library to handle the query string.
function getQueryStringParameter(paramToRetrieve) {
var params =
document.URL.split("?")[1].split("&");
var strParams = "";
for (var i = 0; i < params.length; i = i + 1) {
var singleParam = params[i].split("=");
if (singleParam[0] == paramToRetrieve)
return singleParam[1];
}
}
HTML Page:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AppWeb.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Home</title>
<script
src="http://ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"
type="text/javascript">
</script>
<script
type="text/javascript"
src="../Scripts/jquery-1.9.1.min.js">
</script>
<script
type="text/javascript"
src="../Scripts/sp.ui.controls.js">
</script>
<script
type="text/javascript"
src="../ChromeLoader.js">
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="chrome_ctrl_placeholder"></div>
<!--
The chrome control also makes the SharePoint
Website stylesheet available to your
page -->
<div style="padding-left:100px">
<h1 class="ms-accentText">My Reports</h1>
<h2 class="ms-accentText"> </h2>
<div id="MainContent">
<div>
<h2> </h2>
<hr />
<div>
</div></div></div>
</form>
</body>
Comments
Post a Comment