如何访问远程加载的“<script>”元素的文本?</script>

时间:2010-06-26 22:12:49

标签: javascript jquery ajax

我正在尝试使用greasemonkey(更准确地说是js / jquery)为onemanga编写一个支持ajax的Manga阅读器应用程序

我的问题是我需要在他们的页面上执行一个内联脚本来更新下一页的URL。所以我尝试的是以下内容:

$.get(nextPage,function(nxtHtm) // the variable nextPage already contains required url
{
  nxtImgUrl = $(nxtHtm).find(".one-page img").attr("src");   // get next image url
  $("body").append("<img id='dynamic' src='"+nxtImgUrl+"'/>");  // append next image
  $(nxtHtm).find("script:last-1").appendTo("body"); // attempt to append script to body
  alert(nextPage); // testing if script to change page url has been executed
});

Howerver似乎只对图像部分起作用。该脚本没有任何效果。 我也试过做     警报($(nxtHtm).find( “脚本:最后-1”。)HTML()); 和变体,如.text()或。 VAL() .html()不返回任何内容(不是“null”,它只是警告空白值)而其他两个返回null或undefined

有没有人知道如何在这里添加远程脚本?或者在标签之间捕获文本并只是eval()它?

谢谢^^

2 个答案:

答案 0 :(得分:0)

JQuery会忽略某些元素的内容(例如<head>),可能会以性能的名义。我怀疑<script>就是其中之一。

解决方案是阻止JQuery解析DOM,直到你有机会覆盖这种行为。

  1. 使用converters
  2. 覆盖JQuery默认解析行为
  3. 将所有<script>标记替换为<div data-tag="script">,以便不会忽略它们
  4. 找到相应div的text()
  5. 尝试这样的事情:

    $.ajax(nextPage,{
        success: function( data, status, xhr ){
            data = data.replace(/\<script[^>]+\>/ig,"<div data-script='true'>")
            data = data.replace("</script>","</div>")
            var $data = $(data);
            nxtImgUrl = $data.find(".one-page img").attr("src");
            $("body").append("<img id='dynamic' src='"+nxtImgUrl+"'/>");
            $data.find("div[data-script=true]:last-1").text().appendTo("body");
            alert(nextPage);
        },
        converters:{
            "* text": window.String,
            "text html": true,
            "text xml": true
        },
        dataType:'html'
    });
    

    由于&之类的无效实体,您可能会遇到编码问题,在这种情况下,您可能需要基于RegExp的方法,这也是可能的。让我知道你是怎么过的。

答案 1 :(得分:-1)

搜索jsonP或彗星编程。