Avatar billede nidyahou Praktikant
17. november 2008 - 12:04 Der er 29 kommentarer og
1 løsning

object error i Internet Explorer

hej. jeg får object error på følgende kodestykke, dog KUN i IE (v. 7)

document.googlesync.titles.value += ('][#TO:DataCell:' + event.getTitle().getText());
                document.googlesync.details.value += ('][#TO:DataCell:' + event.getContent().getText());
                //fang locations array
                document.googlesync.adresses.value += ('][#TO:DataCell:');
                for(var l = 0; l < event.getLocations().length; l++){
                document.googlesync.adresses.value += ('][#TO:PartDataCell:' + event.getLocations()[l].getValueString());}
                //fang times
                document.googlesync.times.value += ('][#TO:DataCell:');
                for(var t = 0; t < event.getTimes().length; t++){
                document.googlesync.times.value += ('][#TO:PartDataString:' + google.gdata.DateTime.toIso8601(event.getTimes()[t].getStartTime()));
                document.googlesync.times.value += ('][#TO:PartDataString:' + google.gdata.DateTime.toIso8601(event.getTimes()[t].getEndTime()));}
                //fang participants
                document.googlesync.participants.value += ('][#TO:DataCell:');
                for(var p = 0; p < event.getParticipants().length; p++){
                document.googlesync.participants.value += ('][#TO:PartDataString:' + event.getParticipants()[p].getValueString());
                document.googlesync.participants.value += ('][#TO:PartDataString:' + event.getParticipants()[p].getEmail());}}
                else{
                document.googlesync.sids.value += ('][#TO:DataCell:' + event.getExtendedProperties()[0].getValue());
                Synchronized ++;
                document.googlesync.stitles.value += ('][#TO:DataCell:' + event.getTitle().getText());
                document.googlesync.sdetails.value += ('][#TO:DataCell:' + event.getContent().getText());
                //fang locations array
                document.googlesync.sadresses.value += ('][#TO:DataCell:');
                for(var l = 0; l < event.getLocations().length; l++){
                document.googlesync.sadresses.value += ('][#TO:PartDataCell:' + event.getLocations()[l].getValueString());}
                //fang times
                document.googlesync.stimes.value += ('][#TO:DataCell:');
                for(var t = 0; t < event.getTimes().length; t++){
                document.googlesync.stimes.value += ('][#TO:PartDataString:' + google.gdata.DateTime.toIso8601(event.getTimes()[t].getStartTime()));
                document.googlesync.stimes.value += ('][#TO:PartDataString:' + google.gdata.DateTime.toIso8601(event.getTimes()[t].getEndTime()));}
                //fang participants
                document.googlesync.sparticipants.value += ('][#TO:DataCell:');
                for(var p = 0; p < event.getParticipants().length; p++){
                document.googlesync.sparticipants.value += ('][#TO:PartDataString:' + event.getParticipants()[p].getValueString());
                document.googlesync.sparticipants.value += ('][#TO:PartDataString:' + event.getParticipants()[p].getEmail());}
               

Jeg har objekter der hedder det, og det er som sagt KUN i IE den fejler, men jeg kunne forestille mig, at jeg ikke kunne kalde på den måde? Det er i et popup-vindue hvis det er af betydning.
Avatar billede olebole Juniormester
17. november 2008 - 12:33 #1
<ole>

Hvordan bruger du scriptet?
Hvad sker der?
Hvad sker der ikke?
Hvad, havde du forestillet dig, skulle ske?
Får du fejl?
Hvad siger fejlene?

/mvh
</bole>
Avatar billede nidyahou Praktikant
17. november 2008 - 12:51 #2
Det der gerne skulle ske var at der blev skrevet noget data til nogle hidden fields, som så bliver postet og viderebehandlet. Den fejl jeg får er en som kommer fra ovenstående script hvor der står "[object error]" i en div som fejlen bliver skrevet til. I Firefox fungerer alt som det skal og informationen bliver skrevet til felterne, men i internet explorer bliver informationen ikke skrevet til felterne (jeg ved det fordi jeg prøvede at submitte efter jeg havde fået den fejl). Mine felter er disse:

<form name="googlesync" method="post" action="">
  <input type="button" value="opret ny aftale" id="newevent" name="newevent" onclick="<%=btnPost %>" style="visibility:hidden"/><br />
   
    <input type="button" id="synchronize" name="synchronize" value="<%=btnText %>" onclick="<%=btnOnClick%>"/><br />
  <%end if %>  <input type="hidden" id="confirmposthidden" name="confirmposthidden" value="<%=ConfirmPosts%>"
        style="width:600px;" />
    <input type="hidden" id="confirmposts" name="confirmposts" value=" <%=NGPsToCheck %>"
        style="width:600px;" />
    <input type="hidden" id="posthidden" name="posthidden" value=" " style="width: 600px;" />
    <input type="hidden" id="unsync" name="unsync" value=" " style="width: 600px;" />
    <input type="hidden" id="titles" name="titles" value=" <%=FormTitles %>" style="width: 600px;" />
    <input type="hidden" id="details" name="details" value=" <%=FormDetails %>" style="width: 600px;" />
    <input type="hidden" id="adresses" name="adresses" value=" <%=FormAdresses %>" style="width: 600px;" />
    <input type="hidden" id="times" name="times" value=" <%=FormTimes %>" style="width: 600px;" />
  <input type="hidden" id="participants" name="participants" value=" <%=FormParticipants %>"
        style="width: 600px;" />
    <!--data for allerede oprettede posts-->
    <input type="hidden" id="existsync" name="existsunsync" value=" " style="width: 600px;" />
    <input type="hidden" id="sids" name="sids" value=" " style="width: 600px;" />
    <input type="hidden" id="stitles" name="stitles" value=" " style="width: 600px;" />
    <input type="hidden" id="sdetails" name="sdetails" value=" " style="width: 600px;" />
    <input type="hidden" id="sadresses" name="sadresses" value=" " style="width: 600px;" />
    <input type="hidden" id="stimes" name="stimes" value=" " style="width: 600px;" />
    <input type="hidden" id="sparticipants" name="sparticipants" value=" " style="width: 600px;" />
    </form>
Avatar billede olebole Juniormester
17. november 2008 - 14:19 #3
Prøv at give mig hele JavaScriptet og formkoden ... begge som de ser ud i view->source i browseren. Der er bla. såden én, jeg ikke helt kan blive venner med:

                for(var p = 0; p < event.getParticipants().length; p++){
                    document.googlesync.participants.value += ('][#TO:PartDataString:' + event.getParticipants()[p].getValueString());
                    document.googlesync.participants.value += ('][#TO:PartDataString:' + event.getParticipants()[p].getEmail());}
                } else{
Avatar billede erikjacobsen Ekspert
17. november 2008 - 14:41 #4
Behøver du virkelig mere, Ole? event er noget, der er defineret i IE, men ikke i FF. Muuuligvis skal spørgeren bare bruge et andet navn.
Avatar billede nidyahou Praktikant
17. november 2008 - 15:00 #5
her er hele siden som den ser ud efter jeg prøvede at ændre event - jeg fik desværre stadig object error:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <title>Timeout Intellisync</title>
    <LINK rel="stylesheet" type="text/css" href="../inc/style/timeout_style_print.css">
    <script src="http://www.google.com/jsapi?key=ABQIAAAA-4DPu8eLSXMGJBa1LCchkhQH9W39-xhJgRxDecUFR532IY3yLBRMWPH6xjGJncGUW0pt06u6fNf4bw"
        type="text/javascript"></script>
    <script language="javascript">
        google.load("gdata", "1");
    </script>
</head>

  <body>
  <img src="anything.gif" style="position: absolute; top: -1000px;" />
  <div id="information"></div><br />
<div id="events"></div><br />

      <script type="text/javascript">
          function logMeIn() {
              scope = "http://www.google.com/calendar/feeds/";
              var token = google.accounts.user.login(scope);
          }
          function setupMyService() {
              myService = new google.gdata.calendar.CalendarService('TimeoutCal');
              logMeIn();
          }
          function logMeOut() {
              document.getElementById("login").disabled = false;
              document.getElementById("logout").disabled = true;
              document.getElementById("synchronize").disabled = true;
              google.accounts.user.logout();
          }
          </script>
         

<script>

              // Create the calendar service object
              var calendarService = new google.gdata.calendar.CalendarService('TimeoutCal');

              // The default "private/full" feed is used to retrieve events from
              // the primary private calendar with full projection
              var feedUri = 'http://www.google.com/calendar/feeds/default/private/full';

            var query = new google.gdata.calendar.CalendarEventQuery(feedUri);

            query.setMaxResults(50);
            query.setSingleEvents(true);   
              // The callback method that will be called when getEventsFeed() returns feed data
              var callback = function(result) {
                  // Obtain the array of CalendarEventEntry
                  var entries = result.feed.entry;
                  var Unsynchronized = 0;
                  var Synchronized = 0;
                  for (var i = 0; i < entries.length; i++) {
                      var EntryEvent = entries[i]; 
                if(EntryEvent.getExtendedProperties().length == 0){
                Unsynchronized ++;
                document.googlesync.titles.value += ('][#TO:DataCell:' + EntryEvent.getTitle().getText());
                document.googlesync.details.value += ('][#TO:DataCell:' + EntryEvent.getContent().getText());
                //fang locations array
                document.googlesync.adresses.value += ('][#TO:DataCell:');
                for(var l = 0; l < EntryEvent.getLocations().length; l++){
                document.googlesync.adresses.value += ('][#TO:PartDataCell:' + EntryEvent.getLocations()[l].getValueString());}
                //fang times
                document.googlesync.times.value += ('][#TO:DataCell:');
                for(var t = 0; t < EntryEvent.getTimes().length; t++){
                document.googlesync.times.value += ('][#TO:PartDataString:' + google.gdata.DateTime.toIso8601(EntryEvent.getTimes()[t].getStartTime()));
                document.googlesync.times.value += ('][#TO:PartDataString:' + google.gdata.DateTime.toIso8601(EntryEvent.getTimes()[t].getEndTime()));}
                //fang participants
                document.googlesync.participants.value += ('][#TO:DataCell:');
                for(var p = 0; p < EntryEvent.getParticipants().length; p++){
                document.googlesync.participants.value += ('][#TO:PartDataString:' + EntryEvent.getParticipants()[p].getValueString());
                document.googlesync.participants.value += ('][#TO:PartDataString:' + EntryEvent.getParticipants()[p].getEmail());}}
                else{
                document.googlesync.sids.value += ('][#TO:DataCell:' + EntryEvent.getExtendedProperties()[0].getValue());
                Synchronized ++;
                document.googlesync.stitles.value += ('][#TO:DataCell:' + EntryEvent.getTitle().getText());
                document.googlesync.sdetails.value += ('][#TO:DataCell:' + EntryEvent.getContent().getText());
                //fang locations array
                document.googlesync.sadresses.value += ('][#TO:DataCell:');
                for(var l = 0; l < EntryEvent.getLocations().length; l++){
                document.googlesync.sadresses.value += ('][#TO:PartDataCell:' + EntryEvent.getLocations()[l].getValueString());}
                //fang times
                document.googlesync.stimes.value += ('][#TO:DataCell:');
                for(var t = 0; t < EntryEvent.getTimes().length; t++){
                document.googlesync.stimes.value += ('][#TO:PartDataString:' + google.gdata.DateTime.toIso8601(EntryEvent.getTimes()[t].getStartTime()));
                document.googlesync.stimes.value += ('][#TO:PartDataString:' + google.gdata.DateTime.toIso8601(EntryEvent.getTimes()[t].getEndTime()));}
                //fang participants
                document.googlesync.sparticipants.value += ('][#TO:DataCell:');
                for(var p = 0; p < EntryEvent.getParticipants().length; p++){
                document.googlesync.sparticipants.value += ('][#TO:PartDataString:' + EntryEvent.getParticipants()[p].getValueString());
                document.googlesync.sparticipants.value += ('][#TO:PartDataString:' + EntryEvent.getParticipants()[p].getEmail());}
                }
                }
                  document.googlesync.posthidden.value = ('j');
                  document.googlesync.unsync.value = (Unsynchronized);
                  document.googlesync.existsync.value = (Synchronized);
                  document.googlesync.submit();
                  }

                // Error handler to be invoked when getEventsFeed() produces an error
                var handleError = function(error) {
                document.getElementById("events").innerHTML += (error);
              }

              // Submit the request using the calendar service object
              calendarService.getEventsFeed(query, callback, handleError);
             
</script>
<form name="googlesync" action="" method="post">
      <input type="button" value="opret ny aftale" id="newevent" name="newevent" onclick="location='crmhistorik.asp?menu=crm&shownumofdays=5&func=opret&id=0&ketype=e&selpkt=kal&showinwin=j'" style="visibility:hidden"/><br />
   
    <input type="button" id="synchronize" name="synchronize" value="luk vindue" onclick="submit()"/><br />
    <input type="hidden" id="confirmposthidden" name="confirmposthidden" value=""
        style="width:600px;" />
    <input type="hidden" id="confirmposts" name="confirmposts" value=" "
        style="width:600px;" />
    <input type="hidden" id="posthidden" name="posthidden" value=" " style="width: 600px;" />
    <input type="hidden" id="unsync" name="unsync" value=" " style="width: 600px;" />
    <input type="hidden" id="titles" name="titles" value=" " style="width: 600px;" />
    <input type="hidden" id="details" name="details" value=" " style="width: 600px;" />
    <input type="hidden" id="adresses" name="adresses" value=" " style="width: 600px;" />
    <input type="hidden" id="times" name="times" value=" " style="width: 600px;" />
  <input type="hidden" id="participants" name="participants" value=" "
        style="width: 600px;" />
    <!--data for allerede oprettede posts-->
    <input type="hidden" id="existsync" name="existsunsync" value=" " style="width: 600px;" />
    <input type="hidden" id="sids" name="sids" value=" " style="width: 600px;" />
    <input type="hidden" id="stitles" name="stitles" value=" " style="width: 600px;" />
    <input type="hidden" id="sdetails" name="sdetails" value=" " style="width: 600px;" />
    <input type="hidden" id="sadresses" name="sadresses" value=" " style="width: 600px;" />
    <input type="hidden" id="stimes" name="stimes" value=" " style="width: 600px;" />
    <input type="hidden" id="sparticipants" name="sparticipants" value=" " style="width: 600px;" />
    </form>
 
  </body>
  </html>
Avatar billede erikjacobsen Ekspert
17. november 2008 - 15:22 #6
Øv, nå, det var også kun et gæt. Når du faktisk erklærer den som du gør, så gør det ingen forskel.
Avatar billede olebole Juniormester
17. november 2008 - 15:50 #7
Umiddelbart har jeg ikke nogen forslag, og det er lidt svært at debugge. Hvad vil du gerne ende med i dine skjulte felter? For mig at se, begynder alle felterne med:
    "][#TO: ... ... ..."

- og det forstår jeg ikke helt  =)

"[object error]" er ikke lige den mest sigende fejlmelding, jeg er stødt på øst for Nørre Nebel, så du må nok igang med at alert-debugge. Prøv at sætte en alert ind i toppen af scriptet og test (bare lad den sige 'Halløj', 'Øl, sild og gummi' ... eller hvad du nu brænder for).

Sålænge alerten kommer til syne, før der bliver skrevet til fejl-divet, ligger fejlen efter den linje, alerten ligger på - og du flytter alerten ned på næste linje. På et tidspunkt bliver der skrevet i divet, før alerten kommer. Så ved du i hvilken linje, fejlen forekommer - og så er det formodentlig meget lettere at finde det præcise sted, hvor scriptet fejler.

Har du forøvrigt prøvet at tjekke FF's fejlkonsol, når du tester i den browser? Den går jo lidt mere stille med fejldørene  =)
Avatar billede nidyahou Praktikant
18. november 2008 - 12:05 #8
jeg har en formodning om at det har med tegn som æ, ø og å at gøre. Jeg tror google poster til mig på en måde som internet explorer ikke forstår, for jeg har prøvet bare at skrive æøå på min side og lade det gå fra en side til en anden (gennem asp'en) og der går det fint igennem, men når jeg henter googles informationer ned så fejler det. Er der nogen replace procedurer man kan bruge til dette, eller encode det man får i javascript?
Avatar billede nidyahou Praktikant
18. november 2008 - 12:17 #9
jeg når hertil

<script language="javascript">
            var calendarService = new google.gdata.calendar.CalendarService('TimeoutCalFront');
            var feedUri = 'http://www.google.com/calendar/feeds/default/allcalendars/full';
            alert('hejhej')
            var callback = function(result) {
                var entries = result.feed.entry;
                var Callink = 'http://www.google.com/calendar/embed?bgcolor=%23d6dff5';
                for (var i = 0; i < entries.length; i++) {
                    var calendarEntry = entries[i];
                    var CalPartLink = calendarEntry.getId().getValue().split("www.google.com/calendar/feeds/default/allcalendars/full/");
                    Callink += ('&src=' + CalPartLink[1] + '&color=' + calendarEntry.getColor().getValue().replace('#', '%23'));
                }
                document.getElementById('GoogleIframeCalendar').src = Callink;
                alert(Callink);
            }
            var handleError = function(error) { alert(error); }
            calendarService.getAllCalendarsFeed(feedUri, callback, handleError);
Avatar billede olebole Juniormester
18. november 2008 - 13:36 #10
Det bedste, du kan gøre, er at bruge samme tegnsæt overalt - og det er idag utf-8. I JavaScript er ANSI-funktionerne til de- og encoding af URL'er deprecated og erstattet af Unicode-funktioner. Derfor er iso-8859-1 de facto deprecated - specielt i Ajax sammenhænge
Avatar billede olebole Juniormester
18. november 2008 - 13:44 #11
PS: At bruge utf-8 overalt betyder, at du:

*) lader din DB bruge utf-8 (ret evt. kolationerne på dens tabeller)
*) bruger en utf-8 Content-Type meta i alle dine HTML-dokumenter
*) gemmer dine filer som utf-8, når du gemmer i din editor
Avatar billede olebole Juniormester
18. november 2008 - 13:48 #12
Avatar billede nidyahou Praktikant
18. november 2008 - 14:27 #13
jeg ahr en idé om at det er google selv, fordi hvis man tester i IE inde fra deres testside http://code.google.com/apis/calendar/developers_guide_js.html#Interactive_Samples og min calendar indeholder en post med et af de danske tegn, så er outputtet forkert, selvom google bruger utf-8 (vist i toppen). Jerg tror det er deres script simpelthen
Avatar billede nidyahou Praktikant
18. november 2008 - 14:28 #14
er det helt utænkeligt?
Avatar billede olebole Juniormester
18. november 2008 - 14:44 #15
Nej, det er absolut ikke utænkeligt - omend jeg gerne svarede dig noget andet  :o|

En eller anden skodkoder hos Google har lavet en seriøs bøf og øjensynlig undladt at gemme filen som utf-8 ... i hvertfald bliver den served som iso-8859-1:
    http://validator.w3.org/check?uri=http%3A%2F%2Fcode.google.com%2Fapis%2Fcalendar%2Fdevelopers_guide_js.html%23Interactive_Samples&charset=%28detect+automatically%29&doctype=Inline&group=0&verbose=1

Puuuhhhh ... manden lugter fælt, mor!
Avatar billede olebole Juniormester
18. november 2008 - 14:48 #16
Jeg have sjovt nok en diskusion for et stykke tid siden, hvor en anden bruger på den mest spadede måde prøvede at latterliggøre mig, fordi jeg med ganske god grund påpegede at noget Google-kode var ren og skær skodkode.

Jeg håber blot, han læser med i denne tråd og føler sig til almen, middelsvær latter ... ja, gu' skriver Google også skodkode!  ;o)
Avatar billede nidyahou Praktikant
18. november 2008 - 14:58 #17
kan det fungere hvis jeg ændrer al min encoding til iso-8859-1?
Avatar billede nidyahou Praktikant
18. november 2008 - 14:58 #18
du må iøvrigt hjertensgerne droppe et svar - det har hjulpet mig enormt meget videre - jeg har kæmpet med det i så lang tid.
Avatar billede olebole Juniormester
18. november 2008 - 15:06 #19
Det vil jeg så gøre. Inden du ændrer dit tegnsæt, så tjek lige, om det kun er dokumentations siden, der er vrøvl med. Det kunne jeg nemlig godt forestille mig  =)
Avatar billede olebole Juniormester
18. november 2008 - 15:11 #20
Jeg er på arbejde, så jeg kan ikke sidde og teste, men prøv først i et dokument, du med sikkerhed ved, er gemt som utf-8 (valider det evt. med 'Verbose Output' checked, som jeg gjorde ovenfor). Jeg forestiller mig nemlig, at deres databaser og scripts kører utf-8.

Det passer også fint med, at et dokument, fejlagtig gemt som ANSI, giver problemer med specialtegn  ;o)
Avatar billede nidyahou Praktikant
24. november 2008 - 18:41 #21
jeg må prøve noget med noget :) her er dine hårdttjente og længeventede point :D
Avatar billede nidyahou Praktikant
24. november 2008 - 20:17 #22
mit problem med tegnformattering består - så hvis folk har lyst til at teste kan det ske her: http://www.jdsign.dk/googlepost_valid.htm
Avatar billede erikjacobsen Ekspert
24. november 2008 - 20:57 #23
På pågældende side leveres der ikke tegnsæt information i http-headeren. Den står kun

    Content-Type: text/html

Det betyder at det er det tegnsæt, der står i dit meta-tag gælder. Det ser også til at blive opfattet korrekt.

Hvad skal vi gøre for at få fejlen?
Avatar billede nidyahou Praktikant
25. november 2008 - 09:48 #24
hvis man har en google kalender kan den fremprovokeres ved at logge ind og hente events. Da det er Javascript API'et er jeg ikke så tryg ved at skrive mit eget pw ind i koden :D
Avatar billede erikjacobsen Ekspert
25. november 2008 - 10:16 #26
Ok - lidt senere på dagen prøver jeg lige. Men først når jeg har kigget koden igennem for om du snupper passwords ;)

Til trods for deres mange kodere, laver Google af og til en fejl omkring tegnsæt. Det er nok meget normalt, når man lever i en verden af a-z, og ens opfattelse af udlandet styres af USAnske TV-stationer.
Avatar billede nidyahou Praktikant
25. november 2008 - 10:46 #27
Det sætter jeg pris på at du gider. Jeg tror bare det er en slip-up. Der er nok ikke mange danske kodere der benytter google calendars javascript API.
Avatar billede erikjacobsen Ekspert
25. november 2008 - 11:39 #28
Nu flyttede jeg det lige over på en anden server, også for at teste om det skete noget ved at sætte tegnsæt i http-headeren.

Men jeg får i IE 7: 15 Ã¥r  (altså utf-8 vist som iso-8859-1)
Og i nyeste FF: 15 år  (formentlig utf-8 vist som utf-8)

Det vil du jo nok mene ikke dur. Men kan det skyldes at innerHTML ikke overholder tegnsæt-valg?  Det du får tilbage ligner utf-8, så hvis du bruger data i enhver anden sammenhæng end innerHTML, vil det så virke? Hvad med yderligere at proppe data ind i et <textarea> på siden - den bør være UTF-8.

Ole - innerHTML og tegnsæt?
Avatar billede erikjacobsen Ekspert
25. november 2008 - 11:47 #29
Ok - vent med det <textarea>. Du putter allerede ting ind text-felter. Det er li'så godt.
Avatar billede erikjacobsen Ekspert
25. november 2008 - 11:59 #30
Og problemet ser ud til at være der stadigvæk. Det er som om de data du får er utf-8-et 2 gange, i IE. Mens FF opfører sig som forventet.

Nej, jeg har ikke nogen løsning.

Selv bruger jeg ikke javascript, og dermed ikke en browser, mod Google Calendar, men en almindelig Windows-applikation skrevet i .NET. Der har jeg ingen problemer.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester