JavaScript per Onload einbinden

2. Juni 2010 10:38

Hallo,

ich habe folgende Zeile direkt in die edit.aspx eingebunden:

Code:
<script src="http://maps.google.com/maps?file=api&v=2&key=GOOGLE_API_KEY" type="text/javascript"></script>


Leider wird nun bei jeder eigenen Entität dies geladen. Unschön und sau unpraktisch, da bei uns die User nicht immer das Internet freigeschaltet haben, und so das laden der Form sehr lange geht.
Nun möchte ich über OnLoad{} einbinden. Ich weiß auch wie es geht, aber leider klappt es nicht direkt.

Code:
var url = "http://maps.google.com/maps?file=api&v=2&key=GOOGLE_API_KEY";
var scriptElement = document.createElement("<script src'" + url + "' language='text/javascript'>");
document.getElementsByTagName("head")[0].insertAdjacentElement("beforeEnd",scriptElement);


Mache ich es so, dann zerhaut es mir irgendwie die URL und es sieht nachher so aus:
Code:
<script language="text/javascript" maps?file="api&v=2&key=GOOGLE_API_KEY'" maps.google.com="" src?http:=""></script>


Es muss am Syntax der Variablenzuweisung liegen. Bestimmt an dem /-zeichen.
Aber ich komme einfach nicht drauf!

Re: JavaScript per Onload einbinden

4. Juni 2010 13:45

Hallo tw-elektric,

versuche es mal so:

Code:
var head = document.getElementsByTagName('head')[0];
var url = "http://maps.google.com/maps?file=api&v=2&key=GOOGLE_API_KEY";
var script = document.createElement('script');
script.type= 'text/javascript';
script.src= url;

head.appendChild(script);


Viele Grüße,
Florian

Re: JavaScript per Onload einbinden

10. Juni 2010 10:54

Hallo Florian,

das Script funktioniert soweit.

Es wird die Zeile

<script src="http://maps.google.com/maps?file=api&v=2&key=KEY" type="text/javascript"></script>

beim OnLoad eingebunden.

Leider funktioniert es nicht.
Ich befürchte, dass die Zeile erste eingebunden wird, wenn die Form schon geladen ist.

Wenn ich die Zeile von Hand in die ASP Datei eintrage, so klappt es.

Gibt es unter JavaScript auch irgendeine Möglichkeit diese nicht im Head Tag der Seite einzubinden.
Irgendwie was mit
OnLoad{
INCLUDE http://maps.google.com/maps?file=api&v=2&key=KEY" type="text/javascript
}

Re: JavaScript per Onload einbinden

10. Juni 2010 13:29

Hallo,

Ich befürchte, dass die Zeile erste eingebunden wird, wenn die Form schon geladen ist.
Genau so ist es.

Re: JavaScript per Onload einbinden

11. Juni 2010 08:55

mhhh, gibt es sonst noch eine Idee, wie ich den Code einbinden kann.
Wenn ich es direkt in die edit.aspx mache, so lädt die Google API leider bei allen eigenen Entitäten.

Das ist nicht gewünscht!

Re: JavaScript per Onload einbinden

11. Juni 2010 10:43

Ups sorry :), hatte ich vergessen. Versuche es mal so.
Code:
var head = document.getElementsByTagName('head')[0];
var url = "http://maps.google.com/maps?file=api&v=2&key=GOOGLE_API_KEY";
var script = document.createElement('script');
script.type= 'text/javascript';
script.src= url;
script.onreadystatechange= function () {
if (this.readyState == 'complete' || this.readyState == 'loaded')
{
document.OnLoadCode()
}
}
head.appendChild(script);


Ich weiß nicht ob das bei dir funtkioniert. Ich benutze das um ein externes js-File einzubinden in dem mein JS steht.

Re: JavaScript per Onload einbinden

11. Juni 2010 10:51

nein, geht leider nicht.
Nun habe ich im IE einen Scriptfehler...

Re: JavaScript per Onload einbinden

11. Juni 2010 11:16

Argh....
sorry das war Blödsinn, funktioniert natürlich nur, weil mein Skript die Funktion OnLoadCode hat :P.

Deswegen funktioniert es bei mir... Sorry, nicht zu Ende gedacht.

Schau dir mal das an: http://www.webreference.com/programming/javascript/mk/

Viele Grüße,
Florian

Re: JavaScript per Onload einbinden

11. Juni 2010 13:44

Hallo,

gehe einmal zu diesem Beitrag. Im zweiten Teil zeige ich, wie du einer CRM-Seite Code hinzufügen kannst, der direkt beim Laden ausgeführt wird. Das sollte eigentlich genau das sein, was du benötigst.

Re: JavaScript per Onload einbinden

11. Juni 2010 14:08

michael sulz hat geschrieben:Hallo,

gehe einmal zu diesem [lurl=viewtopic.php?f=56&t=9625]Beitrag[/eurl]. Im zweiten Teil zeige ich, wie du einer CRM-Seite Code hinzufügen kannst, der direkt beim Laden ausgeführt wird. Das sollte eigentlich genau das sein, was du benötigst.


Leider kann ich nicht herausfinden, was du genau meinst?
Im zweiten Teil schreibst du doch von einer eigenen ASPX Seite, oder?


@Florian, den Link schaue ich mir mal an.

Re: JavaScript per Onload einbinden

11. Juni 2010 18:22

Hallo,

genau, du rufst eine eigene ASPX-Seite auf, die nur zwei DInge macht. Erstens einen JavaScript Code definieren, der zweitens in der Standard CRM ASPX-Seite direkt beim laden ausgeführt wird, also auch Code in den Header der ASPX-Seite implementieren kann.
Im Beispiel wird das verwendet, um Menüeinträge auszublenden, du kannst es aber auch für alle anderen Funktionen nutzen.

Re: JavaScript per Onload einbinden

14. Juni 2010 10:26

Okay, habe ich verstanden.
Nun weiß ich nicht genau wie in meinem Fall die ASP Seite aussehen müsste.
Ich öffne entweder eine neue Entität oder eine bestehende über diese URL:

http://srv04:5555/tw-elektric/userdefined/edit.aspx?id={6BB1798B-466E-DF11-9F89-00237D2ECAB3}&_CreateFromType=10004&_CreateFromId=%7bB8BAF990-456E-DF11-9F89-00237D2ECAB3%7d&etc=10005#

Nun würde ich ja hier auf meine eigenen ASP Seite gehen. Wie mache ich das mit der ID?


<%@ Page Language="C#" %>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<script language="javascript">
attachEvent( "onload" , OnPageLoad );
//IFrame ID
var contsGrid;
//IFrame document object
var iframeDoc;
//Views picklist
var SavedQuerySelector;
//The grid object
var crmGrid;

function OnPageLoad()
{
contsGrid = document.all.contsGrid;
var contsUrl = "http://srv04:5555" + "/_root/homepage.aspx?etc=10003";
contsGrid.src = contsUrl;
contsGrid.onreadystatechange = OnGridViewReady;
}

function OnGridViewReady()
{
if( contsGrid.readyState != "complete" )
return;

iframeDoc = contsGrid.contentWindow.document;

//make sure the selector exists
SavedQuerySelector = iframeDoc.all.SavedQuerySelector;
if( SavedQuerySelector )
iframeDoc.all.SavedQuerySelector.attachEvent( "onchange" , OnGridReadyChangeLayout );

//make sure the grid exists
crmGrid = iframeDoc.all.crmGrid;
if( crmGrid )
{
iframeDoc.all.crmGrid.attachEvent( "onrefresh" , OnGridReadyChangeLayout );
//change the layout for the first time
OnGridReadyChangeLayout();
}
}

function OnGridReadyChangeLayout()
{
if( !crmGrid.InnerGrid )
return setTimeout( OnGridReadyChangeLayout , 100 );

/* Hier die Funktionen für die Seite einbauen */
// Aktivieren und deaktivieren ausblenden

var mnuDeactivate = document.all.contsGrid.contentWindow.document.all._MIdoActioncrmGrid10003deactivate;
if (mnuDeactivate)
mnuDeactivate.style.display = "none";

var mnuActivate = document.all.contsGrid.contentWindow.document.all._MIdoActioncrmGrid10003activate;
if (mnuActivate)
mnuActivate.style.display = "none";
}
</script>
</head>
<body scroll="no" style="margin:0px">
<iframe id="contsGrid"
src="about:blank"
style="width:100%;height:100%"
frameborder="0"
scrolling="no">
</iframe>
</body>
</html>