c# - 在 C# 中使用 javascript 不起作用

标签 c# javascript windows-phone-7

我在 wp7 应用程序中使用 javascript 函数时遇到问题。我本质上是在尝试创建一个“在页面上查找”按钮,就像在 Windows Phone 上的默认 IE 浏览器中看到的那样。到目前为止,我已经引用了http://www.liveside.net/2011/10/21/tip-how-to-get-forward-and-find-on-page-back-in-ie9-mobile-on-windows-phone-7-5/中的一个javascript函数。在页面上查找选项将通过单击事件访问。我的实现如下,显示了“在页面上查找”搜索栏,如上面的链接所示,但没有发生任何其他事情,只显示了搜索栏并且无法使用。关于如何通过我的点击事件正确使用这个 javascript 函数有什么想法吗?提前致谢!

Javascript

javascript:(
function()
{
    function G()
    {
        var pf=doc.getElementById('pf');
        var qt=doc.getElementById('qt');

        if(null==pf)
        {
            pf=doc.createElement('div');
            pf.id='pf';
            var s=pf.style;
            s.position='absolute';
            s.zIndex='99';
            s.top=(scT||scBT)+'px';
            s.left=(scL||scBL)+'px';
            s.width='100%';
            s.backgroundColor='#FFFF00';
            pf.appendChild(doc.createTextNode('Search: '));
            qt=doc.createElement('input');
            qt.id='qt';
            qt.type='text';
            pf.appendChild(qt);
            var sb=doc.createElement('input');
            sb.type='button';
            sb.value='Find';
            sb.onclick=function()
            {
                P(qt.value)
            };
            pf.appendChild(sb);
            doc.body.appendChild(pf);
        }
        else
        {
            pf.style.display='inline';
            count=0;
        }
    }
function P(s)
    {
        document.getElementById('pf').style.display='none';
        if(s==='')
            return;
        var n=srchNode(document.body,s.toUpperCase(),s.length);
        alert("Found "+count+" occurrence"+(count==1?"":"s")+" of '"+s+"'.");
        pf.parentNode.removeChild(pf);
        return n;
    }
function srchNode(node,te,len)
    {
        var pos,skip,spannode,middlebit,endbit,middleclone;
        skip=0;
        if(node.nodeType==3)
        {
            pos=node.data.toUpperCase().indexOf(te);
            if(pos>=0)
            {
                spannode=document.createElement("SPAN");
                spannode.style.backgroundColor="red";
                middlebit=node.splitText(pos);
                endbit=middlebit.splitText(len);
                middleclone=middlebit.cloneNode(true);
                spannode.appendChild(middleclone);
                middlebit.parentNode.replaceChild(spannode,middlebit);
                ++count;
                skip=1;
            }
        }
        else
        {
            if(node.nodeType==1&&node.childNodes&&node.tagName.toUpperCase()!="SCRIPT"&&node.tagName.toUpperCase!="STYLE")
        {
            for(var child=0;child<node.childNodes.length;++child)
            {
                child=child+srchNode(node.childNodes[child],te,len);
            }
        }
    }
    return skip;
}
var count=0,scL=0,scT=0,scBL=0,scBT=0;
var w=window,doc=document;
if(typeof doc.body!='undefined'&&typeof doc.body.scrollLeft!='undefined')
{
    scBL=doc.body.scrollLeft;
    scBT=doc.body.scrollTop;
}
if(typeof doc.documentElement!='undefined'&&typeof doc.documentElement.scrollLeft!='undefined')
{
    scL=doc.documentElement.scrollLeft;
    scT=doc.documentElement.scrollTop;
}
G();
})()

点击事件

public void FindOnPage()
    {
        var resource = Application.GetResourceStream(new Uri("Resources/FindOnPage.txt", UriKind.Relative));
        string text;
        StreamReader sr = new StreamReader(resource.Stream);

        while((text = sr.ReadToEnd()) != null)
        {
            TheWebBrowser.InvokeScript("eval", text);
        }        
    }

请注意,javascript 函数位于文本文件 FindOnPage.txt 中。

最佳答案

JavaScript 函数运行良好。将 FindOnPage 方法更改为以下内容

public void FindOnPage()
    {
        var resource = Application.GetResourceStream(new Uri("Resources/FindOnPage.txt", UriKind.Relative));
        string text;
        StreamReader sr = new StreamReader(resource.Stream);

        //while((text = sr.ReadToEnd()) != null)
        if ((text = sr.ReadToEnd()) != null)
        {
            TheWebBrowser.InvokeScript("eval", text);
        }
    }

关于c# - 在 C# 中使用 javascript 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9883342/

相关文章:

javascript - 如何从数据库中获取JSON数据?

silverlight - WP7使用MouseLeftButtonDown触摸图像

c# - Unicode代理字符编码c#

c# - 在 C# 中处理指定的成员类

c# - 用户IP地址,是否使用代理

javascript - 是否有更简洁的方法来更改多个复选框的属性?

c# - 未优化的 MSIL 中多余的 NOP 和分支

javascript - 在 JavaScript 中使用 RegExp 查找所有匹配的选择器

c# - 使用 TweetSharp/Hammock 将媒体上传到 Twitpic 时出现 "Headers rejected by Twitter"

c# - 调用 NavigationContext 时出现 NullReferenceException