2016-01-05 12 views
8

Gibt es eine Möglichkeit, einen leeren Bereich ohne Text oder Bilder auf einer Webseite mithilfe von JavaScript zu erkennen?So erkennen Sie einen leeren Bereich auf einer Webseite

Genauer gesagt, wie Sie feststellen können, ob der Punkt [x, y] in einem leeren Bereich ist, wie im folgenden Beispiel (rot markiert)

enter image description here

EDIT: Ich möchte, dass meine Frage machen klarer, ich baue eine Erweiterung, die Suchergebnisse als vertrauenswürdig oder als Spam markieren soll, möchte ich meine Markierung am Ende des Textes einer Ergebnis-URL platzieren. Ich möchte es auch in einer generischen Art und Weise tun, damit es nicht nur in Google-Webseite funktioniert. ein Beispiel ist unten dargestellt:

google web page

+0

Durch welche Metrik berechnen Sie, dass etwas "leer" ist? In diesem Beispiel ist dieser rote Punkt höchstwahrscheinlich Teil desselben div-Elements, in dem der Text der Frage enthalten ist, sowie der übergeordneten Elemente dieses div. –

+0

Es sieht aus wie Sie nur nach Leerzeichen zwischen HTML-Tags suchen, aber ich bin mir nicht sicher – SidOfc

+0

@SidneyLiebrand Ich möchte Whitespace erkennen, auch wenn es ** innerhalb ** Tags ist. (wie in meinem Beispiel, in einem Textfeld) – happyOasis

Antwort

-1
  • Sie können eine Matrix mit einer Breite und Länge der Seite bauen.
  • Setzen Sie alle Matrixzellen auf Null.
  • Holen Sie sich alle Elemente des DOM.
  • Get x, y, Breite und Höhe jedes Element dieser Link Retrieve the position (X,Y) of an HTML element
  • Zeichnen Sie die Elemente in der Matrix

    for(k=0;k < dom_elements.length;k++) { 
        for(i=dom_elements[k].y;i < dom_elements[k].length;i++) { 
         for(j=dom_elements[k].x;j < dom_elements[k].width;j++) { 
    
          matrix[i][j] = 1 ; 
    
         } 
        } 
    } 
    
  • Und schließlich überprüfen, ob matrix[i][j] auf Null kann helfen, festgelegt ist oder 1

0

Ein Ansatz wäre, mit einem Screenshot des Fensters zu arbeiten.

Sie können Bibliotheken wie html2canvas verwenden, um einen Screenshot in ein HTML-Canvas-Element zu laden.

Als nächste auf window.onclick, verwenden Sie die automatischen event Parameter einen RGBA-Array des geklickt zu bekommen koordinieren:

var pixelData = canvas.getContext('2d').getImageData(
    event.offsetX, 
    event.offsetY, 1, 1) 
.data; 

Nun, wenn alle (oder zumindest die ersten drei) pixelData ‚Artikel s 255 gleich, es bedeutet, dass dieser Punkt weiß ist.

if (pixelData[0] == 255 && pixelData[1] == 255 && pixelData[2] == 255) { 
    // the clicked point is white, 
    // and if the background-color is white, 
    // it can be considered an empty point 
} 

Natürlich ist die Kehrseite ist, dass Sie die Hintergrundfarbe der Seite zu wissen, haben Sie testen, oder die Hintergrundfarbe des Elements in Sie klicken.

+0

Vielleicht vergleichen Sie es mit dem Seitenhintergrund, anstatt weiß? – Dropout

+1

Guter Punkt. Wenn Sie leichten Zugang zum relevanten css-Code haben (zum Beispiel, wenn Sie die Site besitzen). Der Spaßfaktor ist, dass Sie diesen Ansatz auf jeder Site verwenden können, auch wenn Sie keinen lesbaren Quellcode haben. – remdevtec

2

Sie können für testen echte weißen Raum wie folgt aus:

function isWhiteSpace(coords) { 
    var element = document.elementFromPoint(coords.x, coords.y); 
    var whitespace = $(document).add("body, html"); 
    return (whitespace.get().indexOf(element) > -1) ? true : false; 
} 

wo coords ein Objekt mit .x und .y Eigenschaften ist.

DEMO

document.elementFromPoint(), dokumentiert here "eine experimentelle Technologie" ist, also würde ich mein Leben nicht darauf vertrauen.Testen Sie gründlich auf allen Zielplattformen.


bearbeiten

Für die vollständige Erkennung aller weißen Sie suchen, würde isWhiteSpace() die erste von zwei Stufen sein. Die zweite Stufe wäre isVisualWhiteSpace(), die zum Beispiel mit dem Ansatz von @ remdevtec implementiert wird.

Da meine isWhiteSpace(coords) preiswert ist, würden Sie es zuerst durchführen und nur wenn es falsch zurückkehrt, gehen Sie für den teuren Test. Sie könnten den Schutz Eigenschaft ||

var isWhite = isWhiteSpace(coords) || isVisualWhiteSpace(coords); 

Aber Ihr eigentliches Problem isVisualWhiteSpace() wird das Schreiben verwenden. Ich kann nicht anders.

+0

Danke, indem ich nicht nur echte Leerzeichen möchte, würde ich auch so wollen, wenn es in einem div.container ist, oder sogar leeren Raum zwischen Absätzen innerhalb Textarea. – happyOasis

+0

Ich weiß das und denke, Sie haben ein riesiges konzeptionelles, wenn auch nicht technisches Problem bei der Erkennung von "visuellem" Leerraum. Nehmen wir an, Sie könnten den Ansatz von @ remdevtec zur Arbeit bringen, dann würden Sie vermutlich zwischen "unbesetztem" und "besetztem" Leerraum unterscheiden wollen. Betrachten wir zum Beispiel ein div, das Text enthält - wie würden Sie zwischen dem Weiß, das Sie erkennen wollen, und dem Weiß innerhalb des Textes unterscheiden, einschließlich des Weiß in eingeschlossenen Zeichen wie "O" oder "P"? Sie haben sich vielleicht eine unmögliche Aufgabe gestellt. –

Verwandte Themen