Ukryty tekst można wybrać w IE pomimo stylu = 'display: none'

To wydaje się być „cechą” specyficzną dla IE. Testowałem za pomocą IE8. UżytkownikJohn H ma swój wkład, potwierdzając w IE6 i IE7.

Mam jakiś tekst, który jest wbudowany w moją stronę i od początku tworzenia elementu mastyle = "display: none;"

Nie używam jQuery do ukrywania tekstu, a tekst nie jest „wyświetlany”. Chociaż, dla dalszego ujawnienia, mam dostęp do zawartości elementu za pomocą jQuery.html() metoda.

Jeśli jednak użytkownik wybierze tekstblisko mójdisplay:none element i kopiuje to, co zostało wybrane, ukryty tekst zostanie dołączony. Tak jakby wyświetlał się normalnie.

Znaczniki wyglądają tak:

<code>...
<td align="left">
    Text they should see
    <div id="whateverButUnique" style="display:none;">Value I want hidden</div>
    Some other text
</td>
</code>

Tutaj jestskrzypce gdzie mogę odtworzyć problem za pomocą IE <9.

Chociaż nie jest to poważny problem w przypadku tej konkretnej aplikacji, zaskoczyło mnie to i zastanawiałem się, czy jest to „funkcja” lub czy robiłem coś niewłaściwie.

Większośćinne pytania Widziałem w sprawiedisplay:none treść plakatów była widoczna. Ponownie moje treści są zasadniczo niewidoczneaż do wybrane, skopiowane i ostatecznie wklejone.

Czy mogę uniemożliwić użytkownikom programu Internet Explorer znalezienie tej treści przez skopiowanie / wklejenie? Zdaję sobie sprawę, że mogli to zobaczyć w Narzędziach dla programistów i przeglądając źródło.

Aktualizacja: dzięki komentarzom innych użytkowników próbowałem również zastosować stylvisibility:hidden iz-index=-1. UżytkownikJohn H próbował wielu innych prób ukrycia, ale IE jest jak dotąd wytrwały w zezwalaniu na to, by ta funkcja się prześlizgnęła. Dziękujemy za wszystkie wspaniałe pomysły!

Aktualizacja: Dzięki, że pytaszHeather Walters; wartości, których potrzebuję użyć na stronie, są dostępne tylko po stronie serwera, ale potem z nich korzystampo załadowaniu strony aby wygenerować link za pomocą dodatkowego przetwarzania z zewnętrznego programu poprzez jQuery / AJAX. Dlatego buduję stronę z ukrytymi wartościami, ale dołączam, a następnie operuję na ukrytych wartościach, aby zbudować z nimi coś użytecznego.

Kiedy skończyłem używać ich do budowania czegoś użytecznego, teraz zdaję sobie sprawę, że mogę je wytrzeć za pomocą jQuery i uzyskać dodatkowy hit wydajności. Poniższy kod umożliwiłby to wszystkim, którzy mają włączoną obsługę javascript:

<code>$("[id^=whateverButUnique]").html("");
</code>

Dzięki potencjalnie setkom elementów na stronie to dodatkowe przetwarzanie nie jest idealne.

vega, Nie wierzęto rozwiązanie działa dla mnie, ponieważ muszę zbudować stronę i moją ukrytą zawartość po stronie serwera. Wszystkie są zbudowane w pętli po stronie serwera z potencjalnie setkami innych elementów, więc mam możliwość albo zbudować je w miejscu, podczas gdy serwer układa wszystko w tabeli (z ukrytym elementem w zestawie) lub po raz drugi w pętli. (bolesne) i spróbuj wymusić wyświetlanie elementów: żaden nie jest mniej prawdopodobny.

O boze dlaczego, Chciałem wierzyć w twoje rozwiązanie. W IE8 ukryte pole nie pojawiło się w notatniku; jednak udało mi się skopiować sekcję i wkleić ją do Microsoft Word. Nie był już ukryty.

Kolejny czynnik w pracy: ta strona jest już dość ciężka dla javascript, więc miałem nadzieję, że uda mi się znaleźć rozwiązanie, które uniemożliwiłoby IE zobaczenie wartości bez dodawania kolejnego przejścia przez ponad 100 potencjalnych elementów ... ale może po prostu muszę.

Aktualizacja: Robin Mabensugestia wygląda na to, że będzieświetny obejście! Jego sugestia polega na ukryciu wartości wdata-x niestandardowy atrybut HTML5. Wydaje się, że działa mimo mojej (najprawdopodobniej) strony niezgodnej z HTML5. Proszę głosować na jego odpowiedź, jeśli uznasz to również za cenny wkład.

Aktualizacja: Potwierdzono. Z powodzeniem wdrożyłem sugestię Maben i dlatego udało mi się zmniejszyć liczbę przeglądarek DOM - po jednym dla każdego elementu na mojej stronie. Przeglądałem już wszystkie DIVy z przedmiotami, które chciałem pokazać, a teraz mogę automatycznie uzyskać dostęp do właściwości danych w tym samym czasie. W mojej implementacji wygląda to tak:

<code><div style="display:none" data-call-number="..." id="stackLocatorLinkFillUp...">...</div>
</code>

Ta elipsa wskazuje na operacje unikalne dla mnie. Identyfikator ma prosty wskaźnik liczbowy, który zwiększa jeden wskaźnik na rekord.

<code>// Loop through all of the items on the page that start with my id
$("[id^=stackLocatorLinkFillUp]").each( function() {
    // ...
    // Grab the contents of the div
    var innerContent = $(this).html();
    // Extract the call number out of the data-call-number field
    var callNumPreEncoded = $(this).data("callNumber");
    // ...eventually...
    $(this).html(...).css("display","block");
});
</code>

Dziękuję wszystkim!

questionAnswers(3)

yourAnswerToTheQuestion