safeframe
Version:
SafeFrame provides a consistent JS API to include 3rd party content
181 lines (150 loc) • 3.75 kB
JavaScript
var extern = window.extern || $sf.ext;
function testSupports(){
writeLog("start");
//debugger;
var obj = extern.supports();
var key
for (key in obj){
writeLog(key + " is " + obj[key]);
}
}
function testGeometry(){
writeLog("=====================");
writeLog("start geom");
//debugger;
var geom = extern.geom(), buffer = [], obj, typ, propKey;
if(geom == null) {
writeLog("Geometry missing");
} else {
for (key in geom) {
obj = geom[key];
typ = typeof obj;
if (typ == "object") {
propKey = "";
buffer.push(key, ": ");
for (propKey in obj)
{
if (typeof obj[propKey] == "function") continue;
buffer.push(propKey, " is ", obj[propKey], ", ");
}
buffer.length -= 1;
buffer.push("<br />");
} else if (typ == "function") {
continue;
} else {
buffer.push(key, " is ", obj, "<br />");
}
}
writeLog(buffer.join(""));
}
}
function status_update(status, cmd)
{
writeLog("status");
writeLog(status);
if(status == "expanded"){
expanded = true;
} else if (status == "geom-update") {
windowGeometry();
}
adStatus();
}
if (extern) {
try {
extern.register(400, 350, status_update);
writeLog(extern.meta("context"));
//read some meta data passed in from the publisher side
} catch (e) {
writeLog("Exception or no safeframes available: " + e.message);
}
}
function windowGeometry(){
writeLog("=====================");
writeLog("start geom");
//debugger;
var geom = extern.geom();
if(geom == null){
writeLog("Geometry missing");
}
else{
writeLog("Window Dimensions:");
writeLog("width: " + geom.win.w + ", height: " + geom.win.h);
}
}
function expandAd(){
var w = window, sf = w["$sf"], extern = sf && sf.ext, g, ex, l, r;
writeLog("Status before :" + extern.status());
if (extern) {
try {
g = extern.geom();
ex = g && g.exp;
l = Math.abs(ex.l);
r = Math.abs(ex.r);
if (l && l >= 100) {
extern.expand({t:50,b:200,l:50,r:50});
} else if (r && r >= 100) {
extern.expand(100, 200);
} else {
writeLog("didn't expand not enough room");
}
} catch (e) {
//failure
}
} else {
//api expansion not supported
}
writeLog("Status after :" + extern.status());
}
function collapseAd(){
var w = window, sf = w["$sf"], extern = sf && sf.ext, g, ex;
writeLog("Status before :" + extern.status());
extern.collapse();
writeLog("Status after :" + extern.status());
}
function adStatus(){
writeLog("sf.extern.status(): " + extern.status());
}
function externMeta(){
// writeLog("sf.extern.status(): " + extern.status());
try{
var sectionID = $sf.ext.meta("sectionID", "rmx");
writeLog("rmx meta: " + sectionID);
}
catch(ex){}
writeLog("check foometa");
var fm = $sf.ext.meta("foometa");
if(fm == null){
writeLog("foometa came up null");
}
else{
writeLog(fm);
}
}
function showMyUrl(){
// URLs with variable replacement are usually processed by the server
// We are hacking to expose them.
var scripts = document.getElementsByTagName("script");
var myScript = scripts[scripts.length - 2];
writeLog(myScript.src);
}
function getHostUrl(){
var url = extern.hostURL();
writeLog("Host URL: " + url);
}
function getViewableAmount(){
var geom = extern.geom();
var iv = geom.self.iv;
iv = new Number(iv);
var totalViewable = iv * 100;
writeLog("Percent in view: " + totalViewable + "%");
}
function writeLog(message){
//debugger;
var el = document.getElementById("feedback");
el.innerHTML += message + "<br />";
}
function clearLog()
{
var el = document.getElementById("feedback");
el.innerHTML = "";
}