AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TWebbrowser: Relative Bilder und Verknüpfungen
Thema durchsuchen
Ansicht
Themen-Optionen

TWebbrowser: Relative Bilder und Verknüpfungen

Offene Frage von "c.wuensch"
Ein Thema von c.wuensch · begonnen am 15. Jun 2005 · letzter Beitrag vom 5. Jul 2005
Antwort Antwort
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#1

TWebbrowser: Relative Bilder und Verknüpfungen

  Alt 15. Jun 2005, 00:57
Hi,

ich bin dabei, einen einfachen HTML-Editor, basierend auf dem TWebbrowser zu erstellen.

Wenn ich darin allerdings Bilder oder Links mit relativem Ziel (z.B. [img]..\bild.gif[/img]) einfüge, wird der relative Pfad immer in einen absoluten Pfad umgewandelt.

Auch wenn ich den HTML-Code verändere über
Delphi-Quellcode:
var Element: IHtmlElement;

Element := IHtmlElement(IHtmlDocument2(Webbrowser1.Document).body);
Bereich.innerHTML := '[img]..\bild.gif[/img]';
wird das Ziel in einen absoluten Pfad umgewandelt.

Lässt sich dies irgendwie unterdrücken oder deaktivieren?

Wenn dies nicht möglich ist, würde es auch reichen, wenn man beim Speichern alle Verweise automatisch wieder ins relative Format umwandeln könnte.

Hier ist ein Source zu finden, mit dem die HTML-Seite in ein mht-Archiv verpackt wird, wobei alle Links umgemappt werden. Leider verstehe ich aber nicht, wie dies funktioniert. Vielleicht hilft der Artikel aber bei der Lösung...


Habe schon ewig gesucht, aber leider nichts Passendes gefunden, bin für jede Hilfe dankbar!

Cu, Chris
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: TWebbrowser: Relative Bilder und Verknüpfungen

  Alt 18. Jun 2005, 09:49
Hallo,

Hast du schon eine Loeasung gefunden?
Thomas
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#3

Re: TWebbrowser: Relative Bilder und Verknüpfungen

  Alt 18. Jun 2005, 15:57
Nein, eine Lösung für dieses Problem habe ich leider nicht gefunden!

Das Einzige, was ich diesbezüglich bereits herausgefunden habe ist folgendes:

Man kann wenigstens verhindern, dass die Links schon durch bloßes Öffnen und Speichern einer Seite im TWebbrowser verändert werden, indem man die Seite statt mit Navigate() aus einem Stream lädt.
(siehe Beispiel unter http://www.delphi3000.com/articles/article_1934.asp?SK=).

Allerdings werden Links bei der manuellen Bearbeitung weiterhin ins absolute Format umgewandelt.

Falls jemand hierfür einen Lösungsansatz findet, wäre ich sehr dankbar dafür!

Cu, Chris
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#4

Re: TWebbrowser: Relative Bilder und Verknüpfungen

  Alt 2. Jul 2005, 00:45
Hi @all,

nach langem Suchen habe ich einen sehr vielversprechenden Lösungsansatz für das beschriebene Problem gefunden!

Es gibt wohl eine Möglichkeit, Events des tWebbrowsers abzufangen. Hier müsste dann "nur" noch die eingebaute Übersetzung des HTML-Codes in absolute Verknüpfungen unterdrückt werden.

Hier findet ihr eine Beschreibung der Event-Behandlung.

Leider bin ich nur anscheinend zu blöd, diese Funktionen richtig einzusetzen... Kann hier vielleicht irgendjemand mit mehr Erfahrung helfen?

Cu, Chris
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

Re: TWebbrowser: Relative Bilder und Verknüpfungen

  Alt 4. Jul 2005, 14:16
Wenn du dich in der Yahoo TWebbrowser Newsgroup anmeldest, findest du auch ein Beispiel (Demo Programm),
um Events abzufangen.


Edit: Habe das Demo in der Anlage angehàngt.
Angehängte Dateien
Dateityp: zip events_121.zip (3,4 KB, 16x aufgerufen)
Thomas
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#6

Re: TWebbrowser: Relative Bilder und Verknüpfungen

  Alt 4. Jul 2005, 15:38
Hi toms,

danke für das schöne Beispiel.

Ich habe mich inzwischen auch etwas näher mit diesen Events befasst (besonders interessant fand ich OnTranslateAccelerator, hat sich dann aber als etwas anderes herausgestellt...)

Zwar habe ich noch nicht alles verstanden, aber ich vermute inzwischen, dass es doch kein Event gibt, das bei der Umwandlung des HTML-Codes ausgelöst wird, und mit dem man die Umwandlung unterbinden könnte, oder?

Cu, Chris
  Mit Zitat antworten Zitat
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#7

Re: TWebbrowser: Relative Bilder und Verknüpfungen

  Alt 5. Jul 2005, 00:07
Ich habe mir mal angesehen wie Dreamweaver das macht.
Code:
//browseFile(fieldToStoreURL){
//getFullPath(filePathURL){
//getSimpleFileName() {
//fixUpPath(docURL,siteURL,savedPath)
//fileIsCurrentlyOpen(absoluteFileURL);


//Invokes dialog to allow user to select filename. Puts value in text input.
// The optional flag stripParameters will remove anything after a question
// mark if it is set to true

function browseFile(fieldToStoreURL, stripParameters) {
  var fileName = "";
  fileName = browseForFileURL(); //returns a local filename
  if (stripParameters) {
    var index = fileName.indexOf("?");
    if (index != -1) {
      fileName = fileName.substring(0,index);
    }
  }
  if (fileName) fieldToStoreURL.value = fileName;
}


//function: getFullPath
//description: converts relative paths into full paths that start with
//file:///
//Why this is important: A user is prompted for a location to save
//a file. Dreamweaver generates a path that is relative to the currently
//opened document. If a developer tries to use this URL in DWfile, it will
//not work because dreamweaver assumes the path to be relative to the
//extension file. However, full paths will work
//Note that this function sometimes returns a full path that is indirect:
//For instance: file:///C|/MyWebSite/Hobbies/Cooking/.../Hobbies/Images/cake.gif
//However, the user never sees this file path.
//
//Arguments:
//filePathURL - doc-relative,site-relative, or absolute file path

function getFullPath(filePathURL){
   var retVal = (filePathURL)?filePathURL:'';
   var docURL;
   var dotDotSlash;
   var inMiddle;
 
  if (retVal != ''){ 
     //if the document path is relative, for example,My Docs/My Schedule.htm
     //create an absolute path.
     if (  filePathURL.indexOf("file://")!=0  ){ 
     
       //if doc relative...
       if ( filePathURL.charAt(0)!="/" ){
         docURL = dreamweaver.getDocumentDOM('document').URL;
         dotDotSlash = filePathURL.indexOf('../');
         while (dotDotSlash == 0){
           docURL = docURL.substring(0,docURL.lastIndexOf("/"));
           filePathURL = filePathURL.substring(3);
           dotDotSlash = filePathURL.indexOf('../');
         } 
         retVal = docURL.substring(0,docURL.lastIndexOf("/")+1) + filePathURL;
       //else path is site relative...
       } else {
         retVal = dreamweaver.getSiteRoot() + filePathURL.substring(1);
       } 
     }
   }
     return retVal;
}


//Returns the simple file name for the current document

function getSimpleFileName() {
  var filePath = dreamweaver.getDocumentPath("document"); //get full path of file
  var lastSlash = filePath.lastIndexOf("/");
  if (lastSlash != -1) filePath = filePath.substring(lastSlash+1);
  return filePath;
}

// fixUpPath()
// Given the location of the current document, the site root,
// and the path to a file or folder (expressed as a file:// URL),
// returns one of the following:
// the file:// URL passed in, if the document has not been saved
// the file:// URL passed in, if the document is not in the current site
// a document-relative path, if the document has been saved in the current site
function fixUpPath(docURL,siteURL,savedPath){
   var retVal = "";
   if (docURL == "" || (docURL != "" && savedPath.indexOf(dw.getSiteRoot()) == -1)){
      retVal = savedPath;
   }else{
     docURL = docURL.substring(0,docURL.lastIndexOf('/')+1);
      var endStr = (docURL.length > savedPath.length)?savedPath.length:docURL.length;
      var commonStr = "";
       for (var i=0; i < endStr; i++){
      if (docURL.charAt(i) == savedPath.charAt(i)){
        commonStr += docURL.charAt(i);
      }else{
        break;
      }
    }

    var whatsLeft = docURL.substring(commonStr.length);
    var slashPos = whatsLeft.indexOf('/');
    var slashCount = 0;
    var dotDotSlash = "";

    while (slashPos != -1){
      slashCount++;
      slashPos = whatsLeft.indexOf('/',slashPos+1);
    }
   
    for (var j=1; j <= slashCount; j++){
      dotDotSlash += '../';
    }

    retVal = dotDotSlash + savedPath.substring(commonStr.length);
  }
   return retVal;
}

// function: fileIsCurrentlyOpen
// description: given a file path, determines if the file is currently open
// argument: absoluteFilePath -- an absolute file path
function fileIsCurrentlyOpen(absoluteFilePath) {
  var fileObj = dw.getDocumentDOM(absoluteFilePath);
  var openFilesArr = dw.getDocumentList();
  var fileIsOpen = false, nOpenFiles,i;
 
  // openFilesArr is an array of currently open document objects
  if (openFilesArr.length && openFilesArr.length > 0) {
    nOpenFiles = openFilesArr.length;
    for (i=0;i<nOpenFiles;i++) {
      if (fileObj == openFilesArr[i]) {
        fileIsOpen = true;
        break;
      }
    }
 
  }
  return fileIsOpen;
}
bringt mich aber auch nicht weiter...weil jedes Projekt mit absoluten Pfadangaben gespeichert wird.
Ist das, dass Geheimnis?
Code:
 var rootPath = dreamweaver.getSiteRoot();
 retVal = dreamweaver.getSiteRoot() + filePathURL.substring(1);
  Mit Zitat antworten Zitat
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#8

Re: TWebbrowser: Relative Bilder und Verknüpfungen

  Alt 5. Jul 2005, 00:34
das Beipiel ist auch nicht schlecht:
http://delphi.about.com/od/adptips20...ltip1204_3.htm
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#9

Re: TWebbrowser: Relative Bilder und Verknüpfungen

  Alt 5. Jul 2005, 01:27
Hi Horst,

die beiden Beispiele, die du gepostet hast, erklären, wie man relative Pfade in absolute umwandelt.

Das Problem hier ist aber, dass der tWebbrowser bereits selbstständig die relativen Pfadangaben auf einer Seite in absolute umwandelt, was allerdings nicht gewollt wird.

Zwar ist es möglich, die Pfadangaben wieder zurück zu konvertieren (die Umkehrung deines Weges), doch dadurch wird der Original-Inhalt der Seite verändert (z.B. werden auch die Links umgewandelt, die bereits vorher absolut waren und es auch bleiben sollen).

Daher suchen wir hier nach einer Lösung, um den tWebbrowser von der Konvertierung der Pfadangaben abzuhalten.

Cu, Chris
  Mit Zitat antworten Zitat
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#10

Re: TWebbrowser: Relative Bilder und Verknüpfungen

  Alt 5. Jul 2005, 08:55
Hallo Chris

Zitat:
(z.B. werden auch die Links umgewandelt, die bereits vorher absolut waren und es auch bleiben sollen).
Aha, verstehe.
Ich suche auch schon ewig nach einer Lösung für dein Problem.

Grüße
Horst
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz