【问题标题】:Remove images from UIWebview从 UIWebview 中删除图像
【发布时间】:2011-05-26 16:21:11
【问题描述】:

在我的 iPhone 应用程序中,一个 epub 阅读器,基于方法 here,我已经解析了 epub,创建了 UIWebviews,但我有一个小问题。 epub 中的图像大于 iPhone 屏幕的宽度(320 像素)。我可以在 UIWebview ([view stringByEvaluatingJavaScriptFromString:SomeJavaScriptString]) 上调用 Javascript 方法并以编程方式删除这些图像,而无需手动更改 epub?

更新:问题可能是源文件是 xml 文件而不是 HTML?

【问题讨论】:

    标签: javascript ios iphone uiwebview epub


    【解决方案1】:

    你可能想要这样的东西:document.getElementById('id_of_your_image').style.visibility = 'hidden'

    更新 要隐藏文档中的所有图像,

    for (i=0; i<document.getElementsByTagName("img").length; i++) {
        document.getElementsByTagName("img")[i].style.visibility = 'hidden';
    }
    

    应该可以解决问题。

    【讨论】:

    • 是的,但我不想知道图像的 id,因为图像没有 id,正如我在 OP 中所说,我不想编辑epub 手动。有没有办法可以选择所有带有“img”标签的元素并隐藏它们?
    • 奇怪的是,这在 iPhone safari 中有效,但它不能在我的应用程序中正确注入......但是我可以让其他 JS 注入,但是 (alert("hello world!"))
    • 我会接受这个,因为这行得通,但是,我最终以编程方式更改了 HTML 并删除了 &lt;img&gt; 标签。
    • 如果您可以控制 html,则可以在函数中包含外部 JavaScript 文件,然后使用 stringByEvaluatingJavaScriptFromString: 调用该函数。
    • 你的回答是对的。我的要求是在 UIWebview 中加载任何 url 时,它只显示文本而不显示图像。我怎么能阻止它......在你的回答中什么是文件???
    【解决方案2】:
    var images = Array.prototype.slice.call(document.getElementsByTagName('IMG'), 0);
    var imageCount = images.length;
    for (var i = 0; i < imageCount; i++) {
        var image = images[i];
        image.parentNode.removeChild(image);
    }
    

    【讨论】:

    • 当我注入这个 JS 时,UIWebview 上似乎没有任何反应。视图已加载,但屏幕上没有任何反应,结果为nil...我也可以验证此 JS 代码有效:window.scrollTo(0, 0);。关于为什么您的代码没有正确注入的任何想法?
    • 如果你先做前两行然后 alert(imageCount); 会发生什么?
    • 它返回 0。问题可能是它是一个 xml 文件而不是 HTML(实际上是 XHTML)吗?
    • 应该仍然有效。您可以将文档的一部分粘贴到 pastebin 中或编辑您的 q 吗?
    • 是的,在这里试试:pastebin.com/vMzV67ne 但是图像不包括在内...
    【解决方案3】:

    如果您不处理查看细节很重要的图表或图像,为什么不处理:

    1) 编写一些 CSS 来设置 320px 或 640px 图像的最大宽度,具体取决于方向......请参阅 http://www.thecssninja.com/css/iphone-orientation-css 了解如何为不同的方向使用不同的 css。

    2) 在任何其他样式或样式表链接之后将该 CSS 插入到每个 HTML 文件中 - 在 &lt;/body&gt; 之前添加的 &lt;style&gt; 元素内将起作用。

    这样图像仍然可见,但不会超出单个页面宽度。

    下一步,您可以使用 &lt;a href='zoom://x'> 之类的东西包装图像,其中 x 是图像文件名 - 然后在 UIWebViewDelegate 的“shouldStartLoadWithRequest”函数中检查 request.URL.scheme == “zoom” - 如果你可以在一个可缩放的容器中推送一个包含图像 x 的新视图,比如 iBooks。

    【讨论】:

    • 你的意思是 320 像素还是 480 像素? 640 像素适用于 iPhone 4,与方向无关。很好的答案,我真的很喜欢这个解决方案,给用户他们已经拥有的东西,我会记住这一点! +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2017-01-26
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多