Saturday, February 19, 2011

JavaScript: Open Links In A New Window

Again, I got a little problem at work. Someone decided that it would be funny to "play" with the settings. So: We aren't able to open links in a new window, which kinda like sucks often.

Here's the code, again with an explanation below.


<script language="JavaScript">
_spBodyOnLoadFunctionNames.push("rLink");
function rLink()
{
    var anchors = document.getElementsByTagName("a");
    for (var x=0; x<anchors.length; x++)
    {
      if (anchors[x].outerHTML.indexOf('#onw')>0)
      {
        oldText = anchors[x].outerHTML;
        newText = oldText.replace(/#onw/,'" target="_blank');
        anchors[x].outerHTML = newText;
      }
    }
}
</script>
What's going on there?
This part, "_spBodyOnLoadFunctionNames.push("rLink");" , makes sure that the function "rLink" will be loaded when the page is opening.
First off all "var anchors = document.getElementsByTagName("a");" we are searching for all links and are writing them into our array "anchors".
Now we have to search through the array for our tag, which in this case is "#onw".
If a link got that tag, this little friend will do the trick:

oldText = anchors[x].outerHTML;
newText = oldText.replace(/#onw/,'" target="_blank');
anchors[x].outerHTML = newText;

We are now saving the link into another variable "oldText", than we just cut off our tag and open the link in a new window.

But remember: if you want to open a link in a new window, you have to but the "#onw" tag behind that link.

Sunday, February 13, 2011

JavaScript: Automatischer Seitenwechsel

Vor einiger Zeit kam mein Chef zu mir und fragte nach einem kleinen Feature in SharePoint". Er hat das schlichtweg "Bildschirmschoner" genannt. Im ersten Moment dachte ich, er macht Witze. Natürlich hab ich ihm dann mitgeteilt das er die Bildschirmschoner von Windows nutzen soll. Aber: er wollte ein kleines "Tool" das es seiner SharePoint Seite erlaubt nach einer gewissen Zeit automatisch eine neue Seite aufzurufen.

Am Ende kam ich dann mit dem Code unten an, welcher überraschender weise gut funktionierte.

Hier der Code, Erklärung gibts unten drunter.
<html>
  <head>
    <script language="javascript" type="text/javascript">
      var addresses = new Array();
      /* fill array */
      var startt = 100000;
      var activ = window.setTimeout("Show()", startt);
      var length = 4;
      function SetTimer()
      {
        try
        {
          window.clearTimeout(activ);
          activ = window.setTimeout("Show()", startt);
        }
        catch(e)
        {
          window.status = "Error: " + e.number + "; " + e.description ;
        }
      };
      function Show()
      {
        var i = Math.floor(Math.random()*length);
        document.location = addresses[i];
      };
    </script>
  
  </head>
  <body onload="SetTimer()">
  </body>
</html>

Was passiert hier eigentlich?
<body onload="SetTimer()">
Das ist noch einfach: Beim Aufruf der Seite wird die Funktion "SetTimer()" aufgerufen.
 Und hier ist die Funktion auch schon:
function SetTimer()
      {
        try
        {
          window.clearTimeout(activ);
          activ = window.setTimeout("Show()", startt);
        }
        catch(e)
        {
          window.status = "Error: " + e.number + "; " + e.description ;
        }
      };
Der letzte Abschnitt ist klar: Jede Fehlermeldung soll in der Statusleiste des Browsers angezeigt werden.
Dann mal auf zum Hauptteil..Um sicher zu gehen das meine Variable "activ" nicht schon einen Inhalt hat, lasse ich diese mit "clearTimeout" löschen.
Aber wie starte ich den Counter wieder? Hierfür nehme ich die Funktion "setTimeout", welche eine Funktion zum Aufruf und eine Zeitangabe in Millisekunden benötigt. Nach Ablauf der Zeit wird die Funktion "Show()" aufgerufen..
Und damit sind wir auch schon beim eigentlichen Problem: innerhalb "Show()" werde ich die Seiten wechseln lassen. Endlich.

Der Einfachheit halber lasse ich nur 4 Elemente in meinem Array "addresses" zu. Der erste Schritt ist nun eine Zufallszahl zu generieren. Dafür nutze ich "Math.floor(Math.random()*length). "Floor" rundet die Zahlen nur nächsten geraden  Zahl ab. "Random" bietet uns eine Zahl zwischen 0 und 1 an. Um eine Nummer zwischen 1 und 4 zu erhalten muss ich das Ergebnis von Random mit der Länge meines Arrays multiplizieren, in dem Fall 4.

Nun haben wir die Zufallszahl "i". Aber was machen wir damit?
Einfach: Wir ändern die Adresse in der Adressleiste mit "document.location = addresses[i];". Der 2. Teil wählt das Element aus dem Array aus, das an der Stelle "i" steht. Der erste Teil schreibt die Adresse dann in die Adressleiste.

Und schon sind wir fertig. Die Seite wird nun alle paar Minuten die Seite wecheln.

Saturday, February 12, 2011

JavaScript: Automated Page Switching

So, one day I got stuck at work. My boss told me to give his SharePoint site a new little feature. He called it "screen saver". At first I thought he was kidding, I told him to use the ones which come with Windows. But he meant that he needs a little "tool" that will automatically switch through his pages after a couple of minutes.

In the end I came up with a little idea, which indeed worked pretty well.

Here is the code, I will explain it below:
<html>
  <head>
    <script language="javascript" type="text/javascript">
      var addresses = new Array();
      /* fill array */
      var startt = 100000;
      var activ = window.setTimeout("Show()", startt);
      var length = 4;
      function SetTimer()
      {
        try
        {
          window.clearTimeout(activ);
          activ = window.setTimeout("Show()", startt);
        }
        catch(e)
        {
          window.status = "Error: " + e.number + "; " + e.description ;
        }
      };
      function Show()
      {
        var i = Math.floor(Math.random()*length);
        document.location = addresses[i];
      };
    </script>
  
  </head>
  <body onload="SetTimer()">
  </body>
</html>
What's happening there?

<body onload="SetTimer()">
This one is simple: start the function called "Set Timer" when the page is loaded.
 Here's the function we will call:
function SetTimer()
      {
        try
        {
          window.clearTimeout(activ);
          activ = window.setTimeout("Show()", startt);
        }
        catch(e)
        {
          window.status = "Error: " + e.number + "; " + e.description ;
        }
      };
The last part is obvious: display every error in the window status bar.
So, just let us take a look the main part. Just to make sure, that no other timer is set, I let my variable "activ" get cleared by the function "clearTimeout".
The next part is about "how to restart the counter?". Here I am using the function "setTimeout", which needs a function and specified number of milliseconds to work. After the time runs out, the function will call "Show()".
And this will do the trick: within "Show()" I am switching the pages, finally.

To keep it simple, I'm just allowing 4 items in the array "addresses". The first step is to get a random number. For that, I'm using "Math.floor(Math.random()*length)". "Floor" rounds a number downwards to the nearest integer, which is needed for the array. "Random" will provide a number between 0 and 1. To get a number between 1 and 4 I have to multiply the result of "random" with the length of my array, which is 4.

Now we got our random number "i". But what to do with it?
Set a new address in the address bar with "document.location = addresses[i];". The second part will pick the address from the array, the first part with write this part in the address bar.

Now we are done. The pages will automatically switch every couple of minutes.

Monday, February 7, 2011

Getting started.

So...
finally I got a new blog. The first one for 5 years i believe.
Topics will bei just a lot of IT stuff. Especially everything that has to do with SharePoint.