2016-05-17 2 views
1

私はIntel XDKを使用してCordovaアプリケーションを開発しました。タブフィードビューのRSSアグリゲータで、GoogleフィードAPIを使用し、カスタム検索プラグインを使用してRSS検索を簡単にします。私は、RSSフィードリンクをアプリのwebviewではなく外部/システムブラウザで開くようにしたいという問題にぶつかりましたが、効果的な方法を見つけられませんでした。フォーラムでここに示唆されているほとんどすべての方法(thisthisthisthis、およびthis)は成功しませんでした。何があっても、リンクをクリックすると、AndroidとiOSの両方で「コンテンツを読み込む」動画が表示され、何も起こりません(実際にはアプリが停止します)。 InAppBrowserがインストールされており、ナビゲーション、インテント、およびアクセスの設定に完全にアクセスしようとしましたが、これまでに何も機能していませんでした。誰かが、Google Feed APIに関連するものかどうかわかりますか?Cordova RSSフィードリンクは外部ブラウザで開けません

これは私のindex.htmlである -

<!DOCTYPE html> 
    <!--HTML5 doctype--> 
    <html> 

    <head> 

    <title>RSSAgreggator</title> 
    <meta http-equiv="Content-type" content="text/html; charset=utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0, minimal-ui"> 
    <meta name="apple-mobile-web-app-capable" content="yes" /> 
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 

    <style type="text/css"> 
    #feeds { font-size: medium; font-family: helvetica; 
    border-left: 1px solid #ddd} 

    .gfc-control .gfc-resultsHeader .gfc-title { font-size: small; font-weight: bold; color: white} 
    .gfc-control div { font-family: helvetica } 

    </style> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 


    <script type="text/javascript" src="http://www.google.com/jsapi"></script> 

    <link rel="stylesheet" type="text/css" href="lib/appframework/icons.css" /> 
    <link rel="stylesheet" type="text/css" href="lib/appframework/af.ui.css" /> 

    <script type="text/javascript" charset="utf-8" src="lib/jquery.min.js"> </script> 
    <script type="text/javascript" charset="utf-8" src="lib/appframework/appframework.ui.min.js"></script> 

    <script src='cordova.js'></script> 
    <script type="text/javascript" charset="utf-8" src="lib/app.js"></script> 
    <script type="text/javascript" charset="utf-8" src="lib/jquery.gfeed.js"></script> 

    <script type="text/javascript"> 
     $(function() { 
      // convert anchors 
      $('a.feed').gFeed({ target: '#feeds', tabs: true, max: 100 }); 

     }); 


     </script> 

</head> 

<body> 

    <div id="splashscreen" class='ui-loader heavy'> 
     App Framework - Tab View 
     <br> 
     <br> 
     <span class='ui-icon ui-icon-loading spin'></span> 
     <h1>Starting app</h1> 
    </div> 

    <div class="view"> 
     <header> 
      <h1>RSSAggregator</h1> 
     </header> 

     <div class="pages"> 

      <div class="panel" data-title="Aggregator" id="tab1" > 
       <div id="feeds"> 
        <a class="feed" href="http://feeds.feedburner.com/thr/news">THR</a> 
        <a class="feed" href="http://feeds.feedburner.com/variety/headlines">Var</a> 

      </div> 

      <div class="panel" data-title="Tags" id="tab2" > 
       This is view for second Tab 
      </div> 

      <div class="panel" data-title="Feeds" id="tab3"> 
       This is view for third Tab 
      </div> 

      <div class="panel" data-title="Settings" id="tab4"> 
       This is view for fourth Tab 
      </div> 

     </div> 
    <!-- 
    <footer> 
      <a href="#tab1" class="icon home" onclick="$.afui.clearHistory()">Home</a> 
      <a href="#tab2" class="icon heart" onclick="$.afui.clearHistory()">Tags</a> 
      <a href="#tab3" class="icon message" onclick="$.afui.clearHistory()">Feeds</a> 
      <a href="#tab4" class="icon user" onclick="$.afui.clearHistory()">Settings</a> 
     </footer> 



    </div> 
    --> 

    </body> 

    </html> 

これは、飼料用のカスタムプラグインです:

/** 
* Plugin which uses the Google AJAX Feed API for creating feed content 
* @author: M. Alsup (malsup at gmail dot com) 
* @version: 1.0.2 (5/11/2007) 
* Documentation and examples at: http://www.malsup.com/jquery/gfeed/ 
* Free beer and free speech. Enjoy! 
*/ 
(function($) { 

if (!window.google) { 
    alert('You must include the Google AJAX Feed API script'); 
    return; 
}  

if (!google.feeds) google.load("feeds", "1"); 

$.fn.gFeed = function(options) { 
    var opts = jQuery.extend({ 
     target: this, 
     max: 25 // max number of items per feed 
    }, options || {}); 

    var g = new google.feeds.FeedControl(); 

    this.each(function() { 
     var url = this.href || opts.url; 
     var title = opts.title || this.title || $(this).text(); 
     g.addFeed(url, title); 
     g.setNumEntries(opts.max); 

    }); 




    $(opts.target).each(function() { 
     g.draw(this, opts.tabs ? { drawMode: google.feeds.FeedControl.DRAW_MODE_TABBED } : null); 
    }); 

    return this; 
}; 

})(jQuery); 

これは、アプリ自体の符号化である:

function myGetElementsByClassName(selector) { 
    if (document.getElementsByClassName) { 
     return document.getElementsByClassName(selector); 
    } 

    var returnList = new Array(); 
    var nodes = document.getElementsByTagName('div'); 
    var max = nodes.length; 
    for (var i = 0; i < max; i++) { 
     if (nodes[i].className == selector) { 
      returnList[returnList.length] = nodes[i]; 
     } 
    } 
    return returnList; 
} 

var rssReader = { 
    containers : null, 

    // initialization function 
    init : function(selector) { 
     containers = myGetElementsByClassName(selector); 
     for(i=0;i<containers.length;i++){ 
      // getting necessary variables 
      var rssUrl = containers[i].getAttribute('rss_url'); 
      var num = containers[i].getAttribute('rss_num'); 
      var id = containers[i].getAttribute('id'); 

      // creating temp scripts which will help us to transform XML (RSS) to JSON 
      var url = encodeURIComponent(rssUrl); 
      var googUrl = 'https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num='+num+'&q='+url+'&callback=rssReader.parse&context='+id; 

      var script = document.createElement('script'); 
      script.setAttribute('type','text/javascript'); 
      script.setAttribute('charset','utf-8'); 
      script.setAttribute('src',googUrl); 
      containers[i].appendChild(script); 
     } 
    }, 

    // parsing of results by google 
    parse : function(context, data) { 
     var container = document.getElementById(context); 
     container.innerHTML = ''; 

     // creating list of elements 
     var mainList = document.createElement('ul'); 

     // also creating its childs (subitems) 
     var entries = data.feed.entries; 
     for (var i=0; i<entries.length; i++) { 
      var listItem = document.createElement('li'); 
      var title = entries[i].title; 
      var contentSnippet = entries[i].contentSnippet; 
      var contentSnippetText = document.createTextNode(contentSnippet); 

      var link = document.createElement('a'); 
      link.setAttribute('href', entries[i].link); 
      link.setAttribute('target','_system'); 
      var text = document.createTextNode(title); 
      link.appendChild(text); 

      // add link to list item 
      listItem.appendChild(link); 

      var desc = document.createElement('p'); 
      desc.appendChild(contentSnippetText); 

      // add description to list item 
      listItem.appendChild(desc); 

      if (entries[i].mediaGroups) { 
       var img = new Image(); 
       img.src = entries[i].mediaGroups[0].contents[0].url; 
       listItem.appendChild(img); 
      } 

      // adding list item to main list 
      mainList.appendChild(listItem); 
     } 
     container.appendChild(mainList); 
    } 
}; 

window.onload = function() { 
    rssReader.init('post_results'); 
} 

これは設定XMLです:

<?xml version='1.0' encoding='UTF-8'?> 

<!--This file is generated by the Intel XDK. Do not edit this file as your edits will be lost.   --> 
<!--To change the contents of this file, see the documentation on the intelxdk.config.additions.xml file.--> 
<intelxdk:version value="1.0"/> 
<intelxdk:cordova-cli version="5.4.1"/> 

<content src="index.html"/> 
<access origin="*"/> 
<allow-intent href="*"/> 

<intelxdk:plugin intelxdk:name="Device" intelxdk:value="cordova-plugin-device" intelxdk:version="1.1.1" intelxdk:checksum="927290ca" intelxdk:type="file"/> 
<intelxdk:plugin intelxdk:name="Splashscreen" intelxdk:value="cordova-plugin-splashscreen" intelxdk:version="3.2.0" intelxdk:checksum="452a4659" intelxdk:type="file"/> 
<intelxdk:plugin intelxdk:name="InAppBrowser" intelxdk:value="cordova-plugin-inappbrowser" intelxdk:version="1.3.0" intelxdk:checksum="20f7ee20" intelxdk:type="file"/> 
<intelxdk:plugin intelxdk:name="Cordova Network Whitelist Plugin (added by Intel XDK)" intelxdk:value="cordova-plugin-whitelist" intelxdk:version="1.2.1"/> 
<preference name="android-minSdkVersion" value="14"/> 
<preference name="android-targetSdkVersion" value="21"/> 
<preference name="android-installLocation" value="auto"/> 
<preference name="android-signed" value="true"/> 
<preference name="Fullscreen" value="true"/> 
<preference name="splashscreen" value="splash"/> 
<!--creationInfo:{"src":"jsapp/template-tab-view-js/sample.zip","projectTypeName":"com.intel.xdk.projecttype.jsapp"}--> 
<preference name="debuggable" value="false"/> 
<platform name="ios"> 
    <!-- below requires the splash screen plugin --> 
    <!-- docs: https://github.com/apache/cordova-plugin-splashscreen --> 
    <preference name="AutoHideSplashScreen" value="true"/> 
    <preference name="FadeSplashScreen" value="false"/> 
    <preference name="FadeSplashScreenDuration" value="2"/> 
    <preference name="ShowSplashScreenSpinner" value="false"/> 

    <!-- below requires the status bar plugin --> 
    <!-- docs: https://github.com/apache/cordova-plugin-statusbar --> 
    <!-- see http://devgirl.org/2014/07/31/phonegap-developers-guid --> 
    <preference name="StatusBarOverlaysWebView" value="false"/> 
    <preference name="StatusBarBackgroundColor" value="#000000"/> 
    <preference name="StatusBarStyle" value="lightcontent"/> 
</platform> 
<platform name="android"> 
    <!-- below requires the splash screen plugin --> 
    <!-- docs: https://github.com/apache/cordova-plugin-splashscreen --> 
    <preference name="SplashMaintainAspectRatio" value="false"/> 
</platform> 
<intelxdk:crosswalk xmlns:intelxdk="http://xdk.intel.com/ns/v1" xwalk-command-line="--disable-pull-to-refresh-effect"/> 
<intelxdk:crosswalk xmlns:intelxdk="http://xdk.intel.com/ns/v1" xwalk-command-line="--ignore-gpu-blacklist"/></widget> 

答えて

1

解決策を見つけました!

 link.setAttribute('href', entries[i].link); 
     link.setAttribute('target','_system'); 

次に、開いているリンクのすべてのクリックをキャプチャするメカニズムを追加してください。

関連する問題