Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TWebbrowser: Relative Bilder und Verknüpfungen (https://www.delphipraxis.net/47680-twebbrowser-relative-bilder-und-verknuepfungen.html)

c.wuensch 14. Jun 2005 23:57


TWebbrowser: Relative Bilder und Verknüpfungen
 
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

toms 18. Jun 2005 08:49

Re: TWebbrowser: Relative Bilder und Verknüpfungen
 
Hallo,

Hast du schon eine Loeasung gefunden?

c.wuensch 18. Jun 2005 14:57

Re: TWebbrowser: Relative Bilder und Verknüpfungen
 
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

c.wuensch 1. Jul 2005 23:45

Re: TWebbrowser: Relative Bilder und Verknüpfungen
 
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

toms 4. Jul 2005 13:16

Re: TWebbrowser: Relative Bilder und Verknüpfungen
 
Liste der Anhänge anzeigen (Anzahl: 1)
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.

c.wuensch 4. Jul 2005 14:38

Re: TWebbrowser: Relative Bilder und Verknüpfungen
 
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

horst 4. Jul 2005 23:07

Re: TWebbrowser: Relative Bilder und Verknüpfungen
 
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);

horst 4. Jul 2005 23:34

Re: TWebbrowser: Relative Bilder und Verknüpfungen
 
das Beipiel ist auch nicht schlecht:
http://delphi.about.com/od/adptips20...ltip1204_3.htm

c.wuensch 5. Jul 2005 00:27

Re: TWebbrowser: Relative Bilder und Verknüpfungen
 
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

horst 5. Jul 2005 07:55

Re: TWebbrowser: Relative Bilder und Verknüpfungen
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz