JavaScript

.NET, JavaScript: Revertendo uma string/url

Eu não sei bem qual a utilidade disso, mas é a forma mais simples de se reverter uma string:

C#:

using System;

namespace HL
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string str = @"/moc.sserpdrow.nnamsualtodtrebreh//:ptth";
            char[] chars = str.ToCharArray();
            
            Array.Reverse(chars);

            string reverted = new string(chars);
            
            Console.WriteLine(reverted);
        }
    }
}

VB.NET:

Imports System

Namespace HL
    Public Module Program
        Public Sub Main(args() As string)
            Dim str As String = "/moc.sserpdrow.nnamsualtodtrebreh//:ptth"
            Dim chars As Char() = str.ToCharArray()

            Array.Reverse(chars)

            Dim reverted As New String(chars)

            Console.WriteLine(reverted)
        End Sub
    End Module
End Namespace

Basicamente, eu transformo a string em um array de chars e uso o método Array.Reverse (Array) (System) para inverter a ordem do array. E depois eu crio uma nova instância de uma string usando o array de chars revertido.

E segue de bônus como reverter uma string no JavaScript:

var str = "/moc.sserpdrow.nnamsualtodtrebreh//:ptth";

var reverted = str.split("").reverse().join("");

print(reverted);

Até a próxima!

Anúncios

Windows Phone e o WebBrowser: Manipulando o DOM da página

É a primeira vez que estou postando algo sobre o Windows Phone.

Se você já programou para Desktop (Windows Forms) deve saber que o controle WebBrowser do desktop possui uma propriedade chamada Document (do tipo HtmlDocument). Essa propriedade em questão nos permite manipular o DOM da página.

Contudo, essa mesma propriedade não existe no controle WebBrowser do Windows Phone. No entanto, ainda existe uma maneira de manipular o DOM da página, que é se utilizando de JavaScript.

Para fazer isso, primeiramente você deve definir a propriedade IsScriptEnabled para True. Depois, basta seguir a linha de raciocínio do exemplo abaixo:

string script = "function() { return document.getElementById('Exemplo').innerText; }";

object returnValue = WebBrowser1.InvokeScript("eval", script);

// nesse caso returnValue será o InnerText do elemento Exemplo.

O exemplo acima utiliza a função WebBrowser.InvokeScript para invocar a função global eval() do JavaScript que, por último, executa o script passado como parâmetro.

No caso do exemplo acima, será retornado para a variável returnValue a propriedade InnerText do elemento Exemplo.

Bônus

Para carregar um HTML em um controle WebBrowser utilize o método WebBrowser.NavigateToString Method.

Para salvar a página carregada utilize o método WebBrowser.SaveToString.

Documentação no MSDN: WebBrowser Class (Microsoft.Phone.Controls)

PS.: Não tive a oportunidade de testar o código acima pois estou sem o SDK do Windows Phone instalado. Contudo, de acordo com a documentação e a teoria esta é a maneira de se fazer.

Então, se você obtiver alguma exceção na chamada do método InvokeScript tente fazer alguma alteração no seu script. Lembre-se que a mesma coisa pode ser feita de várias maneiras.

Outra coisa que devo salientar é que o mesmo script pode não funcionar em todas as versões do Windows Phone, então você deve testar manualmente!

WebBrowser: Injetar (Executar) script na página

Irei mostrar por meio deste post como fazer para injetar um script(Em JavaScript) em uma página web carregada em um controle WebBrowser. Eis o código:

VB.NET:

    Public Sub InjectScript(Script As String)
        WebBrowser1.Document.InvokeScript("eval", New Object() {Script})
    End Sub

C#:

    public void InjectScript(string Script)
    {
	WebBrowser1.Document.InvokeScript("eval", new object[] { Script });
    }

Basicamente, eu uso a função InvokeScript da propriedade Document do controle WebBrowser para chamar a função global eval() do JavaScript.

A função eval() computa ou executa um argumento passado para ela. Se o argumento for uma expressão matemática eval(), irá retornar o resultado do cálculo. Se o argumento for um ou mais trechos de códigos, eval() irá executa-los e, caso o trecho retorne algum valor, o mesmo será retornado por eval(), e em última instância, por InvokeScript.

Veja este outro post com um outro exemplo: Windows Phone e o WebBrowser: Manipulando o DOM da página | Herbert.Lausmann

Então, basta chamar a rotina InjectScript informando no parâmetro o script que você deseja executar na página. Você pode transformar o método InjectScript em uma função, caso queira que o script retorne algum valor. 🙂