Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在WP7中将值从代码隐藏传递到javascript函数_Javascript_C#_Windows Phone 7_Dom Events - Fatal编程技术网

如何在WP7中将值从代码隐藏传递到javascript函数

如何在WP7中将值从代码隐藏传递到javascript函数,javascript,c#,windows-phone-7,dom-events,Javascript,C#,Windows Phone 7,Dom Events,我正在尝试为webbrowser控件中显示的文本实现搜索功能。我有一个搜索功能,可以正确地突出显示文本,尽管它目前通过在webbrowser中用javascript创建一个搜索栏来实现这一点。问题在于,根据页面的大小,javascript搜索栏的大小总是不同的,这非常令人困惑。我希望能够将用户在WP7应用程序的文本框中输入的搜索值传递给这个javascript函数,然后让它简单地突出显示这些值。不过,我不知道如何将值传递给javascript函数,而且我很难做到这一点 文本文件中的Javascr

我正在尝试为webbrowser控件中显示的文本实现搜索功能。我有一个搜索功能,可以正确地突出显示文本,尽管它目前通过在webbrowser中用javascript创建一个搜索栏来实现这一点。问题在于,根据页面的大小,javascript搜索栏的大小总是不同的,这非常令人困惑。我希望能够将用户在WP7应用程序的文本框中输入的搜索值传递给这个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();
})()

假设我有一个名为searchbar的搜索栏,我如何通过javascript函数将文本传递给用户输入,以便突出显示文本?我没有javascript方面的经验,因此在这方面的任何帮助都将不胜感激

没有直接的方法通过它。 您可以在调用eval之前用字符串替换参数,首先像这样修改javascript

javascript:(
function(searchString)
{
function P(s)
{
    if(s==='')
        return;
    var n=srchNode(document.body,s.toUpperCase(),s.length);
    alert("Found "+count+" occurrence"+(count==1?"":"s")+" of '"+s+"'.");
    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;
    }
    P(searchString);
})("#search#")

谢谢你的回复。我尝试了您的解决方案,但在WebBrowser.InvokeScripteval,text;声明SystemException未处理,并且在以下情况下发生未知错误。错误:80020101。似乎用搜索栏文本替换搜索实际上是可行的。对不起,我犯了一个小错误,代码仍然引用pf,不再存在,我将删除对pf的引用并更正代码。你可以使用编辑过的代码,它工作得很好!我感谢你的帮助。现在,我假设如果我想删除突出显示,我可以向javascript函数传递一个空的搜索字符串?通常这可能不起作用,要删除突出显示,您可能需要编写另一个函数来搜索跨度,并删除背景色或放置透明色。给span一个ID,使用var myspan=doc.getElementById'spanID'查找span;然后将背景色设置为透明。
javascript:(
function(searchString)
{
function P(s)
{
    if(s==='')
        return;
    var n=srchNode(document.body,s.toUpperCase(),s.length);
    alert("Found "+count+" occurrence"+(count==1?"":"s")+" of '"+s+"'.");
    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;
    }
    P(searchString);
})("#search#")
public void FindOnPage()
    {
        var resource = Application.GetResourceStream(new Uri("Resources/FindOnPage/FindOnPage.txt", UriKind.Relative));
        string text;
        StreamReader sr = new StreamReader(resource.Stream);

        //while((text = sr.ReadToEnd()) != null) 
        if ((text = sr.ReadToEnd()) != null)
        {
        text = text.Replace("#search#",SearchBar.Text); //Replace SearchBar.Text with the string you want to search    
        TheWebBrowser.InvokeScript("eval", text);
        } 
    }